Makefile: extract script to massage Shell scripts

Same as in the preceding commits, extract a script that allows us to unify how we massage shell scripts. 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 eb98cb835c9faf4d675411b3314b7fc9820ab179
4 files changed +68 -35
GIT-BUILD-OPTIONS.in
+4
@@ -36,3 +36,7 @@ GIT_INTEROP_MAKE_OPTS=@GIT_INTEROP_MAKE_OPTS@
36 GIT_TEST_INDEX_VERSION=@GIT_TEST_INDEX_VERSION@
37 GIT_TEST_PERL_FATAL_WARNINGS=@GIT_TEST_PERL_FATAL_WARNINGS@
38 RUNTIME_PREFIX=@RUNTIME_PREFIX@
39 +GITWEBDIR=@GITWEBDIR@
40 +USE_GETTEXT_SCHEME=@USE_GETTEXT_SCHEME@
41 +LOCALEDIR=@LOCALEDIR@
42 +BROKEN_PATH_FIX=@BROKEN_PATH_FIX@
Makefile
+10 -24
@@ -1558,10 +1558,10 @@ endif
1558
1559 ifdef SANE_TOOL_PATH
1560 SANE_TOOL_PATH_SQ = $(subst ','\'',$(SANE_TOOL_PATH))
1561 -BROKEN_PATH_FIX = 's|^\# @BROKEN_PATH_FIX@$$|git_broken_path_fix "$(SANE_TOOL_PATH_SQ)"|'
1561 +BROKEN_PATH_FIX = s|^\# @BROKEN_PATH_FIX@$$|git_broken_path_fix "$(SANE_TOOL_PATH_SQ)"|
1562 PATH := $(SANE_TOOL_PATH):${PATH}
1563 else
1564 -BROKEN_PATH_FIX = '/^\# @BROKEN_PATH_FIX@$$/d'
1564 +BROKEN_PATH_FIX = /^\# @BROKEN_PATH_FIX@$$/d
1565 endif
1566
1567 ifeq (,$(HOST_CPU))
@@ -2546,26 +2546,8 @@ GIT-SCRIPT-DEFINES: FORCE
2546 echo "$$FLAGS" >$@; \
2547 fi
2548
2549 -define cmd_munge_script
2550 -sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
2551 - -e 's|@SHELL_PATH@|$(SHELL_PATH_SQ)|' \
2552 - -e 's|@DIFF@|$(DIFF_SQ)|' \
2553 - -e 's|@LOCALEDIR@|$(localedir_SQ)|g' \
2554 - -e 's/@USE_GETTEXT_SCHEME@/$(USE_GETTEXT_SCHEME)/g' \
2555 - -e $(BROKEN_PATH_FIX) \
2556 - -e 's|@GITWEBDIR@|$(gitwebdir_SQ)|g' \
2557 - -e 's|@PERL_PATH@|$(PERL_PATH_SQ)|g' \
2558 - -e 's|@PAGER_ENV@|$(PAGER_ENV_SQ)|g' \
2559 - $@.sh >$@+
2560 -endef
2561 -
2562 -$(SCRIPT_SH_GEN) : % : %.sh GIT-SCRIPT-DEFINES
2563 - $(QUIET_GEN)$(cmd_munge_script) && \
2564 - chmod +x $@+ && \
2565 - mv $@+ $@
2566 -
2567 -$(SCRIPT_LIB) : % : %.sh GIT-SCRIPT-DEFINES
2568 - $(QUIET_GEN)$(cmd_munge_script) && \
2549 +$(SCRIPT_SH_GEN) $(SCRIPT_LIB) : % : %.sh generate-script.sh GIT-BUILD-OPTIONS GIT-SCRIPT-DEFINES
2550 + $(QUIET_GEN)./generate-script.sh "$<" "$@+" ./GIT-BUILD-OPTIONS && \
2551 mv $@+ $@
2552
2553 git.rc: git.rc.in GIT-VERSION-GEN GIT-VERSION-FILE
@@ -2635,8 +2617,8 @@ GIT-PERL-HEADER: $(PERL_HEADER_TEMPLATE) GIT-PERL-DEFINES Makefile
2617 perllibdir:
2618 @echo '$(perllibdir_SQ)'
2619
2638 -git-instaweb: git-instaweb.sh GIT-SCRIPT-DEFINES
2639 - $(QUIET_GEN)$(cmd_munge_script) && \
2620 +git-instaweb: git-instaweb.sh generate-script.sh GIT-BUILD-OPTIONS GIT-SCRIPT-DEFINES
2621 + $(QUIET_GEN)./generate-script.sh "$<" "$@+" ./GIT-BUILD-OPTIONS && \
2622 chmod +x $@+ && \
2623 mv $@+ $@
2624 else # NO_PERL
@@ -3199,6 +3181,10 @@ GIT-BUILD-OPTIONS: FORCE
3181 -e "s|@GIT_TEST_INDEX_VERSION@|\'$(GIT_TEST_INDEX_VERSION)\'|" \
3182 -e "s|@GIT_TEST_PERL_FATAL_WARNINGS@|\'$(GIT_TEST_PERL_FATAL_WARNINGS)\'|" \
3183 -e "s|@RUNTIME_PREFIX@|\'$(RUNTIME_PREFIX_OPTION)\'|" \
3184 + -e "s|@GITWEBDIR@|\'$(gitwebdir_SQ)\'|" \
3185 + -e "s|@USE_GETTEXT_SCHEME@|\'$(USE_GETTEXT_SCHEME)\'|" \
3186 + -e "s|@LOCALEDIR@|\'$(localedir_SQ)\'|" \
3187 + -e "s!@BROKEN_PATH_FIX@!\'$(BROKEN_PATH_FIX)\'!" \
3188 GIT-BUILD-OPTIONS.in >$@+
3189 @if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo "Unsubstituted build options in $@" >&2 && exit 1; fi
3190 @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
contrib/buildsystems/CMakeLists.txt
+20 -11
@@ -838,18 +838,23 @@ set(git_shell_scripts
838 ${git_sh_scripts} ${git_shlib_scripts} git-instaweb)
839
840 foreach(script ${git_shell_scripts})
841 - file(STRINGS ${CMAKE_SOURCE_DIR}/${script}.sh content NEWLINE_CONSUME)
842 - string(REPLACE "@SHELL_PATH@" "${SHELL_PATH}" content "${content}")
843 - string(REPLACE "@DIFF@" "diff" content "${content}")
844 - string(REPLACE "@LOCALEDIR@" "${LOCALEDIR}" content "${content}")
845 - string(REPLACE "@GITWEBDIR@" "${GITWEBDIR}" content "${content}")
846 - string(REPLACE "@NO_CURL@" "" content "${content}")
847 - string(REPLACE "@USE_GETTEXT_SCHEME@" "" content "${content}")
848 - string(REPLACE "# @BROKEN_PATH_FIX@" "" content "${content}")
849 - string(REPLACE "@PERL_PATH@" "${PERL_PATH}" content "${content}")
850 - string(REPLACE "@PAGER_ENV@" "LESS=FRX LV=-c" content "${content}")
851 - file(WRITE ${CMAKE_BINARY_DIR}/${script} ${content})
841 + if ("${script}" IN_LIST git_sh_scripts)
842 + string(REPLACE ".sh" "" shell_gen_path "${script}")
843 + else()
844 + set(shell_gen_path "${script}")
845 + endif()
846 +
847 + add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/${shell_gen_path}"
848 + COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-script.sh"
849 + "${CMAKE_SOURCE_DIR}/${script}.sh"
850 + "${CMAKE_BINARY_DIR}/${shell_gen_path}"
851 + "${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS"
852 + DEPENDS "${CMAKE_SOURCE_DIR}/generate-script.sh"
853 + "${CMAKE_SOURCE_DIR}/${script}.sh"
854 + VERBATIM)
855 + list(APPEND shell_gen ${CMAKE_BINARY_DIR}/${shell_gen_path})
856 endforeach()
857 +add_custom_target(shell-gen ALL DEPENDS ${shell_gen})
858
859 #perl scripts
860 parse_makefile_for_scripts(git_perl_scripts "SCRIPT_PERL" "")
@@ -1183,6 +1188,10 @@ string(REPLACE "@GIT_INTEROP_MAKE_OPTS@" "" git_build_options "${git_build_optio
1188 string(REPLACE "@GIT_TEST_INDEX_VERSION@" "" git_build_options "${git_build_options}")
1189 string(REPLACE "@GIT_TEST_PERL_FATAL_WARNINGS@" "" git_build_options "${git_build_options}")
1190 string(REPLACE "@RUNTIME_PREFIX@" "'${RUNTIME_PREFIX}'" git_build_options "${git_build_options}")
1191 +string(REPLACE "@GITWEBDIR@" "'${GITWEBDIR}'" git_build_options "${git_build_options}")
1192 +string(REPLACE "@USE_GETTEXT_SCHEME@" "" git_build_options "${git_build_options}")
1193 +string(REPLACE "@LOCALEDIR@" "'${LOCALEDIR}'" git_build_options "${git_build_options}")
1194 +string(REPLACE "@BROKEN_PATH_FIX@" "" git_build_options "${git_build_options}")
1195 if(USE_VCPKG)
1196 string(APPEND git_build_options "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n")
1197 endif()
generate-script.sh new
+34
@@ -0,0 +1,34 @@
1 +#!/bin/sh
2 +
3 +set -e
4 +
5 +if test $# -ne 3
6 +then
7 + echo >&2 "USAGE: $0 <INPUT> <OUTPUT> <GIT-BUILD-OPTIONS>"
8 + exit 1
9 +fi
10 +
11 +INPUT="$1"
12 +OUTPUT="$2"
13 +BUILD_OPTIONS="$3"
14 +
15 +. "$BUILD_OPTIONS"
16 +
17 +sed -e "1s|#!.*/sh|#!$SHELL_PATH|" \
18 + -e "s|@SHELL_PATH@|$SHELL_PATH|" \
19 + -e "s|@DIFF@|$DIFF|" \
20 + -e "s|@LOCALEDIR@|$LOCALEDIR|g" \
21 + -e "s/@USE_GETTEXT_SCHEME@/$USE_GETTEXT_SCHEME/g" \
22 + -e "$BROKEN_PATH_FIX" \
23 + -e "s|@GITWEBDIR@|$GITWEBDIR|g" \
24 + -e "s|@PERL_PATH@|$PERL_PATH|g" \
25 + -e "s|@PAGER_ENV@|$PAGER_ENV|g" \
26 + "$INPUT" >"$OUTPUT"
27 +
28 +case "$(basename "$INPUT")" in
29 +git-mergetool--lib.sh|git-sh-i18n.sh|git-sh-setup.sh)
30 + ;;
31 +*)
32 + chmod a+x "$OUTPUT"
33 + ;;
34 +esac