Hi, this patch series contains a mostly-random set of smallish improvements, simplifications and fixes to the Meson build instructions. Changes in v2: - Redo the two commits regarding PATH handling. We now only prepend system-specific paths to PATH and handle the `-Dsane_tool_path` option the same. - Continue to propagate libcurl include directories into libgit, as we need it for "help.c" to resolve LIBCURL_VERSION. Reorder the patch to minimize the required changes. - Fix a commit message typo. - Include another commit that fixes the OpenSSL fallback on Windows. - Include another commit to fix linker errors due to out-of-memory situations on Windows with GitLab CI. - Link to v1: https://lore.kernel.org/r/20250129-b4-pks-meson-improvements-v1-0-ab709f0be12c@xxxxxx Changes in v3: - Fix missing linker arguments for a couple of aliased executables on Windows with MSVC. - Link to v2: https://lore.kernel.org/r/20250130-b4-pks-meson-improvements-v2-0-2f05581ffb44@xxxxxx I've kicked off an extra pipeline at [1] to verify that this version works on next and doesn't break anything. Thanks! Patrick [1]: https://github.com/git/git/pull/1898 --- Patrick Steinhardt (13): meson: fix exec path with enabled runtime prefix meson: fix OpenSSL fallback when not explicitly required meson: inline the static 'git' library meson: simplify use of the common-main library meson: introduce `libgit_curl` dependency meson: stop linking libcurl into all executables meson: drop separate version library meson: improve PATH handling meson: improve handling of `sane_tool_path` option meson: prevent finding sed(1) in a loop meson: fix overwritten `git` variable meson: consistently use custom program paths to resolve programs gitlab-ci: restrict maximum number of link jobs on Windows .gitlab-ci.yml | 2 +- Documentation/howto/meson.build | 2 +- Documentation/meson.build | 13 ++-- meson.build | 156 +++++++++++++++++++--------------------- meson_options.txt | 4 +- oss-fuzz/meson.build | 2 +- t/helper/meson.build | 4 +- t/meson.build | 4 +- 8 files changed, 89 insertions(+), 98 deletions(-) Range-diff versus v2: 1: 94730a8bdb4 = 1: fd7097ab8bd meson: fix exec path with enabled runtime prefix 2: 97710a79d0f = 2: ff8d4cd70c6 meson: fix OpenSSL fallback when not explicitly required 3: 66a8c6f24d0 = 3: 238a45c8bb0 meson: inline the static 'git' library 4: f717119b1a0 ! 4: 1bd9f892310 meson: simplify use of the common-main library @@ Commit message instead of creating a static library, we now instead compile the common set of files into each executable separately. - This change surfaces an issue when linking aliases for git-remote-http: - we extract all objects from `git-remote-http` et al and then link them - into the new executable. As such, these objects would already contain - a `main()` function. But now that we also compile "common-main.c" into - these aliased executables we see a linker error due to `main()` being - defined twice. We fix this by only linking against `libgit.a`. - Signed-off-by: Patrick Steinhardt <ps@xxxxxx> ## meson.build ## @@ meson.build: if host_machine.system() == 'windows' endif endif -common_main_library = static_library('common-main', -+ -+libgit_commonmain = declare_dependency( - sources: common_main_sources, +- sources: common_main_sources, - c_args: libgit_c_args, - dependencies: libgit_dependencies, - include_directories: libgit_include_directories, -) -common_main = declare_dependency( - link_with: common_main_library, ++ ++libgit_commonmain = declare_dependency( ++ link_with: static_library('common-main', ++ sources: common_main_sources, ++ dependencies: [ libgit ], ++ ), link_args: common_main_link_args, + dependencies: [ libgit ], ) @@ meson.build: if get_option('curl').enabled() test_dependencies += executable(alias, objects: git_remote_http.extract_all_objects(recursive: false), - dependencies: [libgit, common_main], -+ dependencies: [libgit], ++ dependencies: [libgit_commonmain], ) install_symlink(alias + executable_suffix, @@ meson.build: test_dependencies += executable('git-imap-send', bin_wrappers += executable(alias, objects: git.extract_all_objects(recursive: false), - dependencies: [libgit, common_main], -+ dependencies: [libgit], ++ dependencies: [libgit_commonmain], ) install_symlink(alias + executable_suffix, 5: 1b61303b130 ! 5: 024f4297f5e meson: introduce `libgit_curl` dependency @@ meson.build: if get_option('curl').enabled() foreach alias : [ 'git-remote-https', 'git-remote-ftp', 'git-remote-ftps' ] test_dependencies += executable(alias, - objects: git_remote_http.extract_all_objects(recursive: false), -- dependencies: [libgit], +- dependencies: [libgit_commonmain], + sources: 'remote-curl.c', + dependencies: [libgit_curl], ) 6: 70dc5edc05c = 6: 7fa4957e256 meson: stop linking libcurl into all executables 7: 7fe6d1d4e74 = 7: b24c4e06deb meson: drop separate version library 8: 1d0597eb7cf = 8: 8ca171f9694 meson: improve PATH handling 9: 9219ab697a7 = 9: beedc776a7b meson: improve handling of `sane_tool_path` option 10: 7e3e0bb409f = 10: 018f549375f meson: prevent finding sed(1) in a loop 11: c1243c17dbe ! 11: 3da8f4f105d meson: fix overwritten `git` variable @@ meson.build: test_dependencies += executable('git-imap-send', bin_wrappers += executable(alias, - objects: git.extract_all_objects(recursive: false), + objects: git_builtin.extract_all_objects(recursive: false), - dependencies: [libgit], + dependencies: [libgit_commonmain], ) 12: f06585cd99e = 12: b2febf1acac meson: consistently use custom program paths to resolve programs 13: 02f0ffdd362 = 13: f5bb92726dc gitlab-ci: restrict maximum number of link jobs on Windows --- base-commit: 6dd4e543f2219290db9faa61b30f7f30a34e4b50 change-id: 20250121-b4-pks-meson-improvements-3e575363e91c