]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Makefile: refactor generators to be PWD-independent
authorPatrick Steinhardt <ps@pks.im>
Fri, 6 Dec 2024 13:24:49 +0000 (14:24 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 6 Dec 2024 22:52:11 +0000 (07:52 +0900)
We have multiple scripts that generate headers from other data. All of
these scripts have the assumption built-in that they are executed in the
current source directory, which makes them a bit unwieldy to use during
out-of-tree builds.

Refactor them to instead take the source directory as well as the output
file as arguments.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Makefile
contrib/buildsystems/CMakeLists.txt
generate-cmdlist.sh
generate-configlist.sh
generate-hooklist.sh

index 35352119a8c8c73cacac154ada08834d48365d17..009e7d8e957740f3a04efe147664917345d5d189 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2523,17 +2523,17 @@ $(BUILT_INS): git$X
 config-list.h: generate-configlist.sh
 
 config-list.h: Documentation/*config.txt Documentation/config/*.txt
-       $(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh >$@
+       $(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh $@
 
 command-list.h: generate-cmdlist.sh command-list.txt
 
 command-list.h: $(wildcard Documentation/git*.txt)
        $(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \
                $(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \
-               command-list.txt >$@
+               $@
 
 hook-list.h: generate-hooklist.sh Documentation/githooks.txt
-       $(QUIET_GEN)$(SHELL_PATH) ./generate-hooklist.sh >$@
+       $(QUIET_GEN)$(SHELL_PATH) ./generate-hooklist.sh $@
 
 SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):\
        $(localedir_SQ):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
index 93c865ee2bf0fc7eb42f21a2c015a2e1ea5cd737..e7bd45cbb68d1a313227cc6c335bba137d9d9458 100644 (file)
@@ -638,23 +638,24 @@ set(EXCLUSION_PROGS_CACHE ${EXCLUSION_PROGS} CACHE STRING "Programs not built" F
 if(NOT EXISTS ${CMAKE_BINARY_DIR}/command-list.h OR NOT EXCLUSION_PROGS_CACHE STREQUAL EXCLUSION_PROGS)
        list(REMOVE_ITEM EXCLUSION_PROGS empty)
        message("Generating command-list.h")
-       execute_process(COMMAND ${SH_EXE} ${CMAKE_SOURCE_DIR}/generate-cmdlist.sh ${EXCLUSION_PROGS} command-list.txt
-                       WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-                       OUTPUT_FILE ${CMAKE_BINARY_DIR}/command-list.h)
+       execute_process(COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-cmdlist.sh"
+                               ${EXCLUSION_PROGS}
+                               "${CMAKE_SOURCE_DIR}"
+                               "${CMAKE_BINARY_DIR}/command-list.h")
 endif()
 
 if(NOT EXISTS ${CMAKE_BINARY_DIR}/config-list.h)
        message("Generating config-list.h")
-       execute_process(COMMAND ${SH_EXE} ${CMAKE_SOURCE_DIR}/generate-configlist.sh
-                       WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-                       OUTPUT_FILE ${CMAKE_BINARY_DIR}/config-list.h)
+       execute_process(COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-configlist.sh"
+                               "${CMAKE_SOURCE_DIR}"
+                               "${CMAKE_BINARY_DIR}/config-list.h")
 endif()
 
 if(NOT EXISTS ${CMAKE_BINARY_DIR}/hook-list.h)
        message("Generating hook-list.h")
-       execute_process(COMMAND ${SH_EXE} ${CMAKE_SOURCE_DIR}/generate-hooklist.sh
-                       WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
-                       OUTPUT_FILE ${CMAKE_BINARY_DIR}/hook-list.h)
+       execute_process(COMMAND "${SH_EXE}" ${CMAKE_SOURCE_DIR}/generate-hooklist.sh
+                               "${CMAKE_SOURCE_DIR}"
+                               "${CMAKE_BINARY_DIR}/hook-list.h")
 endif()
 
 include_directories(${CMAKE_BINARY_DIR})
index 205541e0f7f81b1df4061215ae34a2742a45475d..b923a5aab80dfa571a40a4f6fa3d860fcf8f8dd1 100755 (executable)
@@ -64,7 +64,7 @@ define_category_names () {
 print_command_list () {
        echo "static struct cmdname_help command_list[] = {"
 
-       echo "$1" |
+       echo "$2" |
        while read cmd rest
        do
                synopsis=
@@ -76,7 +76,7 @@ print_command_list () {
                                break
                                ;;
                        esac
-               done <"Documentation/$cmd.txt"
+               done <"$1/Documentation/$cmd.txt"
 
                printf '\t{ "%s", N_("%s"), 0' "$cmd" "$synopsis"
                printf " | CAT_%s" $rest
@@ -93,18 +93,28 @@ do
        shift
 done
 
-commands="$(command_list "$1")"
-categories="$(category_list "$commands")"
+if test "$#" -ne 2
+then
+       die "USAGE: $0 <SOURCE_DIR> <OUTPUT>"
+fi
+
+SOURCE_DIR="$1"
+OUTPUT="$2"
+
+{
+       commands="$(command_list "$SOURCE_DIR"/command-list.txt)"
+       categories="$(category_list "$commands")"
 
-echo "/* Automatically generated by generate-cmdlist.sh */
-struct cmdname_help {
-       const char *name;
-       const char *help;
-       uint32_t category;
-};
-"
-define_categories "$categories"
-echo
-define_category_names "$categories"
-echo
-print_command_list "$commands"
+       echo "/* Automatically generated by generate-cmdlist.sh */
+       struct cmdname_help {
+               const char *name;
+               const char *help;
+               uint32_t category;
+       };
+       "
+       define_categories "$categories"
+       echo
+       define_category_names "$categories"
+       echo
+       print_command_list "$SOURCE_DIR" "$commands"
+} >"$OUTPUT"
index 8692fe5cf4d5e4025265e6110254b05640615fea..579422619cc777ff597523a4db81b99912aac3aa 100755 (executable)
@@ -1,13 +1,19 @@
 #!/bin/sh
 
-echo "/* Automatically generated by generate-configlist.sh */"
-echo
+SOURCE_DIR="$1"
+OUTPUT="$2"
+
+if test -z "$SOURCE_DIR" || ! test -d "$SOURCE_DIR" || test -z "$OUTPUT"
+then
+       echo >&2 "USAGE: $0 <SOURCE_DIR> <OUTPUT>"
+       exit 1
+fi
 
 print_config_list () {
        cat <<EOF
 static const char *config_name_list[] = {
 EOF
-       grep -h '^[a-zA-Z].*\..*::$' Documentation/*config.txt Documentation/config/*.txt |
+       grep -h '^[a-zA-Z].*\..*::$' "$SOURCE_DIR"/Documentation/*config.txt "$SOURCE_DIR"/Documentation/config/*.txt |
        sed '/deprecated/d; s/::$//; s/,  */\n/g' |
        sort |
        sed 's/^.*$/    "&",/'
@@ -17,5 +23,9 @@ EOF
 EOF
 }
 
-echo
-print_config_list
+{
+       echo "/* Automatically generated by generate-configlist.sh */"
+       echo
+       echo
+       print_config_list
+} >"$OUTPUT"
index 2f9f54eb545be2bd79c37a868dbeef96d2ddfb9f..e22068c2fa4139983d685fd3bcd78e3e2a52beb0 100755 (executable)
@@ -2,6 +2,17 @@
 #
 # Usage: ./generate-hooklist.sh >hook-list.h
 
+SOURCE_DIR="$1"
+OUTPUT="$2"
+
+if test -z "$SOURCE_DIR" || ! test -d "$SOURCE_DIR" || test -z "$OUTPUT"
+then
+       echo >&2 "USAGE: $0 <SOURCE_DIR> <OUTPUT>"
+       exit 1
+fi
+
+{
+
 cat <<EOF
 /* Automatically generated by generate-hooklist.sh */
 
@@ -11,10 +22,12 @@ EOF
 sed -n \
        -e '/^~~~~*$/ {x; s/^.*$/       "&",/; p;}' \
        -e 'x' \
-       <Documentation/githooks.txt |
+       <"$SOURCE_DIR"/Documentation/githooks.txt |
        LC_ALL=C sort
 
 cat <<EOF
        NULL,
 };
 EOF
+
+} >"$OUTPUT"