Makefile: use "generate-perl.sh" to massage Perl library

Extend "generate-perl.sh" such that it knows to also massage the Perl library files. There are two major differences: - We do not read in the Perl header. This is handled by matching on whether or not we have a Perl shebang. - We substitute some more variables, which we read in via our GIT-BUILD-OPTIONS. Adapt both our Makefile and the CMake build instructions to use this. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Dec 6, 2024 at 14:24 UTC ccfba9e0c45d85e980b3c83bf1e30bf4f1e25ccf
4 files changed +27 -22
GIT-BUILD-OPTIONS.in
+2
@@ -1,6 +1,8 @@
1 SHELL_PATH=@SHELL_PATH@
2 TEST_SHELL_PATH=@TEST_SHELL_PATH@
3 PERL_PATH=@PERL_PATH@
4 +PERL_LOCALEDIR=@PERL_LOCALEDIR@
5 +NO_PERL_CPAN_FALLBACKS=@NO_PERL_CPAN_FALLBACKS@
6 DIFF=@DIFF@
7 PYTHON_PATH=@PYTHON_PATH@
8 TAR=@TAR@
Makefile
+4 -6
@@ -3095,13 +3095,9 @@ endif
3095 NO_PERL_CPAN_FALLBACKS_SQ = $(subst ','\'',$(NO_PERL_CPAN_FALLBACKS))
3096 endif
3097
3098 -perl/build/lib/%.pm: perl/%.pm GIT-PERL-DEFINES
3098 +perl/build/lib/%.pm: perl/%.pm generate-perl.sh GIT-BUILD-OPTIONS GIT-VERSION-FILE GIT-PERL-DEFINES
3099 $(call mkdir_p_parent_template)
3100 - $(QUIET_GEN) \
3101 - sed -e 's|@LOCALEDIR@|$(perl_localedir_SQ)|g' \
3102 - -e 's|@NO_GETTEXT@|$(NO_GETTEXT_SQ)|g' \
3103 - -e 's|@NO_PERL_CPAN_FALLBACKS@|$(NO_PERL_CPAN_FALLBACKS_SQ)|g' \
3104 - < $< > $@
3100 + $(QUIET_GEN)$(SHELL_PATH) generate-perl.sh ./GIT-BUILD-OPTIONS ./GIT-VERSION-FILE GIT-PERL-HEADER "$<" "$@"
3101
3102 perl/build/man/man3/Git.3pm: perl/Git.pm
3103 $(call mkdir_p_parent_template)
@@ -3168,6 +3164,8 @@ GIT-BUILD-OPTIONS: FORCE
3164 -e "s|@SHELL_PATH@|\'$(SHELL_PATH_SQ)\'|" \
3165 -e "s|@TEST_SHELL_PATH@|\'$(TEST_SHELL_PATH_SQ)\'|" \
3166 -e "s|@PERL_PATH@|\'$(PERL_PATH_SQ)\'|" \
3167 + -e "s|@PERL_LOCALEDIR@|\'$(perl_localedir_SQ)\'|" \
3168 + -e "s|@NO_PERL_CPAN_FALLBACKS@|\'$(NO_PERL_CPAN_FALLBACKS_SQ)\'|" \
3169 -e "s|@DIFF@|\'$(DIFF)\'|" \
3170 -e "s|@PYTHON_PATH@|\'$(PYTHON_PATH_SQ)\'|" \
3171 -e "s|@TAR@|\'$(TAR)\'|" \
contrib/buildsystems/CMakeLists.txt
+9 -14
@@ -853,6 +853,9 @@ endforeach()
853
854 #perl scripts
855 parse_makefile_for_scripts(git_perl_scripts "SCRIPT_PERL" "")
856 +#perl modules
857 +file(GLOB_RECURSE perl_modules "${CMAKE_SOURCE_DIR}/perl/*.pm")
858 +list(TRANSFORM perl_modules REPLACE "${CMAKE_SOURCE_DIR}/" "")
859
860 #create perl header
861 file(STRINGS ${CMAKE_SOURCE_DIR}/perl/header_templates/fixed_prefix.template.pl perl_header )
@@ -869,9 +872,12 @@ add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/GIT-VERSION-FILE"
872 "${CMAKE_SOURCE_DIR}/GIT-VERSION-FILE.in"
873 VERBATIM)
874
872 -foreach(script ${git_perl_scripts})
875 +foreach(script ${git_perl_scripts} ${perl_modules})
876 string(REPLACE ".perl" "" perl_gen_path "${script}")
877
878 + get_filename_component(perl_gen_dir "${perl_gen_path}" DIRECTORY)
879 + file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${perl_gen_dir}")
880 +
881 add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/${perl_gen_path}"
882 COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-perl.sh"
883 "${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS"
@@ -893,19 +899,6 @@ file(STRINGS ${CMAKE_SOURCE_DIR}/git-p4.py content NEWLINE_CONSUME)
899 string(REPLACE "#!/usr/bin/env python" "#!/usr/bin/python" content "${content}")
900 file(WRITE ${CMAKE_BINARY_DIR}/git-p4 ${content})
901
896 -#perl modules
897 -file(GLOB_RECURSE perl_modules "${CMAKE_SOURCE_DIR}/perl/*.pm")
898 -
899 -foreach(pm ${perl_modules})
900 - string(REPLACE "${CMAKE_SOURCE_DIR}/perl/" "" file_path ${pm})
901 - file(STRINGS ${pm} content NEWLINE_CONSUME)
902 - string(REPLACE "@LOCALEDIR@" "${LOCALEDIR}" content "${content}")
903 - string(REPLACE "@NO_PERL_CPAN_FALLBACKS@" "" content "${content}")
904 - file(WRITE ${CMAKE_BINARY_DIR}/perl/build/lib/${file_path} ${content})
905 -#test-lib.sh requires perl/build/lib to be the build directory of perl modules
906 -endforeach()
907 -
908 -
902 #templates
903 file(GLOB templates "${CMAKE_SOURCE_DIR}/templates/*")
904 list(TRANSFORM templates REPLACE "${CMAKE_SOURCE_DIR}/templates/" "")
@@ -1155,6 +1148,8 @@ file(STRINGS ${CMAKE_SOURCE_DIR}/GIT-BUILD-OPTIONS.in git_build_options NEWLINE_
1148 string(REPLACE "@SHELL_PATH@" "'${SHELL_PATH}'" git_build_options "${git_build_options}")
1149 string(REPLACE "@TEST_SHELL_PATH@" "'${TEST_SHELL_PATH}'" git_build_options "${git_build_options}")
1150 string(REPLACE "@PERL_PATH@" "'${PERL_PATH}'" git_build_options "${git_build_options}")
1151 +string(REPLACE "@PERL_LOCALEDIR@" "'${LOCALEDIR}'" git_build_options "${git_build_options}")
1152 +string(REPLACE "@NO_PERL_CPAN_FALLBACKS@" "" git_build_options "${git_build_options}")
1153 string(REPLACE "@DIFF@" "'${DIFF}'" git_build_options "${git_build_options}")
1154 string(REPLACE "@PYTHON_PATH@" "'${PYTHON_PATH}'" git_build_options "${git_build_options}")
1155 string(REPLACE "@TAR@" "'${TAR}'" git_build_options "${git_build_options}")
generate-perl.sh
+12 -2
@@ -18,10 +18,20 @@ OUTPUT="$5"
18 . "$GIT_VERSION_FILE"
19
20 sed -e '1{' \
21 + -e " /^#!.*perl/!b" \
22 -e " s|#!.*perl|#!$PERL_PATH|" \
23 -e " r $PERL_HEADER" \
24 -e ' G' \
25 -e '}' \
25 - -e "s/@GIT_VERSION@/$GIT_VERSION/g" \
26 + -e "s|@GIT_VERSION@|$GIT_VERSION|g" \
27 + -e "s|@LOCALEDIR@|$PERL_LOCALEDIR|g" \
28 + -e "s|@NO_GETTEXT@|$NO_GETTEXT|g" \
29 + -e "s|@NO_PERL_CPAN_FALLBACKS@|$NO_PERL_CPAN_FALLBACKS|g" \
30 "$INPUT" >"$OUTPUT"
27 -chmod a+x "$OUTPUT"
31 +
32 +case "$INPUT" in
33 +*.perl)
34 + chmod a+x "$OUTPUT";;
35 +*)
36 + ;;
37 +esac