To build the libgit-version library, Meson first generates `version-def.h` in the build directory. Then it compiles `version.c` into a library. During compilation, Meson tells to include both the build directory and the project root directory. However, when the user previously has compiled Git using Make, they will have a `version-def.h` file in project root directory as well. Because `version-def.h` is included in `version.c` using the #include directive with double quotes, some compilers will look for the header file in the same directory as the source file. This will cause compilation of `version.c` ran by Meson to include `version-def.h` previously made by Make, which might be out of date. Copy `version.c` to the build directory before compiling it to ensure `version-def.h` from the build directory is used. Signed-off-by: Toon Claes <toon@xxxxxxxxx> --- --- meson.build | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 0064eb64f546a6349a8694ce251bd352febda6fe..8ecb22c80e4fc3f194e97c14dbf83f541d72b25b 100644 --- a/meson.build +++ b/meson.build @@ -1486,11 +1486,15 @@ version_def_h = custom_target( env: version_gen_environment, ) +# Because most compilers prefer header files in the same directory as the source +# file, copy version.c to the build directory. +version_c = fs.copyfile(meson.current_source_dir() / 'version.c', 'version.c') + # Build a separate library for "version.c" so that we do not have to rebuild # everything when the current Git commit changes. libgit_version_library = static_library('git-version', sources: [ - 'version.c', + version_c, version_def_h, ], c_args: libgit_c_args, --- base-commit: fbe8d3079d4a96aeb4e4529cc93cc0043b759a05 change-id: 20250113-toon-fix-meson-version-3d4d33fdabe3 Thanks -- Toon