Makefile: extract script to generate gitweb.cgi

In order to generate "gitweb.cgi" we have to replace various different placeholders. This is done ad-hoc and is thus not easily reusable across different build systems. Introduce a new GITWEB-BUILD-OPTIONS.in template that we populate at configuration time with the expected options. This script is then used as input for a new "generate-gitweb.sh" script that generates the final "gitweb.cgi" file. While this requires us to repeat the options multiple times, it is in line to how we generate other build options like our GIT-BUILD-OPTIONS file. While at it, refactor how we replace the GITWEB_PROJECT_MAXDEPTH. Even though this variable is supposed to be an integer, the source file has the value quoted. The quotes are eventually stripped via sed(1), which replaces `"@GITWEB_PROJECT_MAXDEPTH@"` with the actual value, which is rather nonsensical. This is made clearer by just dropping the quotes in the source file. 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 d2507bbbf4cec59fc002ca8e59e03155836d5005
4 files changed +101 -31
gitweb/GITWEB-BUILD-OPTIONS.in new
+24
@@ -0,0 +1,24 @@
1 +PERL_PATH=@PERL_PATH@
2 +JSMIN=@JSMIN@
3 +CSSMIN=@CSSMIN@
4 +GIT_BINDIR=@GIT_BINDIR@
5 +GITWEB_CONFIG=@GITWEB_CONFIG@
6 +GITWEB_CONFIG_SYSTEM=@GITWEB_CONFIG_SYSTEM@
7 +GITWEB_CONFIG_COMMON=@GITWEB_CONFIG_COMMON@
8 +GITWEB_HOME_LINK_STR=@GITWEB_HOME_LINK_STR@
9 +GITWEB_SITENAME=@GITWEB_SITENAME@
10 +GITWEB_PROJECTROOT=@GITWEB_PROJECTROOT@
11 +GITWEB_PROJECT_MAXDEPTH=@GITWEB_PROJECT_MAXDEPTH@
12 +GITWEB_EXPORT_OK=@GITWEB_EXPORT_OK@
13 +GITWEB_STRICT_EXPORT=@GITWEB_STRICT_EXPORT@
14 +GITWEB_BASE_URL=@GITWEB_BASE_URL@
15 +GITWEB_LIST=@GITWEB_LIST@
16 +GITWEB_HOMETEXT=@GITWEB_HOMETEXT@
17 +GITWEB_CSS=@GITWEB_CSS@
18 +GITWEB_LOGO=@GITWEB_LOGO@
19 +GITWEB_FAVICON=@GITWEB_FAVICON@
20 +GITWEB_JS=@GITWEB_JS@
21 +GITWEB_SITE_HTML_HEAD_STRING=@GITWEB_SITE_HTML_HEAD_STRING@
22 +GITWEB_SITE_HEADER=@GITWEB_SITE_HEADER@
23 +GITWEB_SITE_FOOTER=@GITWEB_SITE_FOOTER@
24 +HIGHLIGHT_BIN=@HIGHLIGHT_BIN@
gitweb/Makefile
+29 -30
@@ -77,43 +77,42 @@ GITWEB_JSLIB_FILES += static/js/javascript-detection.js
77 GITWEB_JSLIB_FILES += static/js/adjust-timezone.js
78 GITWEB_JSLIB_FILES += static/js/blame_incremental.js
79
80 -
81 -GITWEB_REPLACE = \
82 - -e 's|@GIT_VERSION@|$(GIT_VERSION)|g' \
83 - -e 's|@GIT_BINDIR@|$(bindir)|g' \
84 - -e 's|@GITWEB_CONFIG@|$(GITWEB_CONFIG)|g' \
85 - -e 's|@GITWEB_CONFIG_SYSTEM@|$(GITWEB_CONFIG_SYSTEM)|g' \
86 - -e 's|@GITWEB_CONFIG_COMMON@|$(GITWEB_CONFIG_COMMON)|g' \
87 - -e 's|@GITWEB_HOME_LINK_STR@|$(GITWEB_HOME_LINK_STR)|g' \
88 - -e 's|@GITWEB_SITENAME@|$(GITWEB_SITENAME)|g' \
89 - -e 's|@GITWEB_PROJECTROOT@|$(GITWEB_PROJECTROOT)|g' \
90 - -e 's|"@GITWEB_PROJECT_MAXDEPTH@"|$(GITWEB_PROJECT_MAXDEPTH)|g' \
91 - -e 's|@GITWEB_EXPORT_OK@|$(GITWEB_EXPORT_OK)|g' \
92 - -e 's|@GITWEB_STRICT_EXPORT@|$(GITWEB_STRICT_EXPORT)|g' \
93 - -e 's|@GITWEB_BASE_URL@|$(GITWEB_BASE_URL)|g' \
94 - -e 's|@GITWEB_LIST@|$(GITWEB_LIST)|g' \
95 - -e 's|@GITWEB_HOMETEXT@|$(GITWEB_HOMETEXT)|g' \
96 - -e 's|@GITWEB_CSS@|$(GITWEB_CSS)|g' \
97 - -e 's|@GITWEB_LOGO@|$(GITWEB_LOGO)|g' \
98 - -e 's|@GITWEB_FAVICON@|$(GITWEB_FAVICON)|g' \
99 - -e 's|@GITWEB_JS@|$(GITWEB_JS)|g' \
100 - -e 's|@GITWEB_SITE_HTML_HEAD_STRING@|$(GITWEB_SITE_HTML_HEAD_STRING)|g' \
101 - -e 's|@GITWEB_SITE_HEADER@|$(GITWEB_SITE_HEADER)|g' \
102 - -e 's|@GITWEB_SITE_FOOTER@|$(GITWEB_SITE_FOOTER)|g' \
103 - -e 's|@HIGHLIGHT_BIN@|$(HIGHLIGHT_BIN)|g'
104 -
80 .PHONY: FORCE
81 $(MAK_DIR_GITWEB)GITWEB-BUILD-OPTIONS: FORCE
107 - @rm -f $@+
108 - @echo "x" '$(PERL_PATH_SQ)' $(GITWEB_REPLACE) "$(JSMIN)|$(CSSMIN)" >$@+
82 + @sed -e 's|@PERL_PATH@|$(PERL_PATH_SQ)|' \
83 + -e 's|@JSMIN@|$(JSMIN)|' \
84 + -e 's|@CSSMIN@|$(CSSMIN)|' \
85 + -e 's|@GIT_VERSION@|$(GIT_VERSION)|' \
86 + -e 's|@GIT_BINDIR@|$(bindir)|' \
87 + -e 's|@GITWEB_CONFIG@|$(GITWEB_CONFIG)|' \
88 + -e 's|@GITWEB_CONFIG_SYSTEM@|$(GITWEB_CONFIG_SYSTEM)|' \
89 + -e 's|@GITWEB_CONFIG_COMMON@|$(GITWEB_CONFIG_COMMON)|' \
90 + -e 's|@GITWEB_HOME_LINK_STR@|$(GITWEB_HOME_LINK_STR)|' \
91 + -e 's|@GITWEB_SITENAME@|$(GITWEB_SITENAME)|' \
92 + -e 's|@GITWEB_PROJECTROOT@|$(GITWEB_PROJECTROOT)|' \
93 + -e 's|@GITWEB_PROJECT_MAXDEPTH@|$(GITWEB_PROJECT_MAXDEPTH)|' \
94 + -e 's|@GITWEB_EXPORT_OK@|$(GITWEB_EXPORT_OK)|' \
95 + -e 's|@GITWEB_STRICT_EXPORT@|$(GITWEB_STRICT_EXPORT)|' \
96 + -e 's|@GITWEB_BASE_URL@|$(GITWEB_BASE_URL)|' \
97 + -e 's|@GITWEB_LIST@|$(GITWEB_LIST)|' \
98 + -e 's|@GITWEB_HOMETEXT@|$(GITWEB_HOMETEXT)|' \
99 + -e 's|@GITWEB_CSS@|$(GITWEB_CSS)|' \
100 + -e 's|@GITWEB_LOGO@|$(GITWEB_LOGO)|' \
101 + -e 's|@GITWEB_FAVICON@|$(GITWEB_FAVICON)|' \
102 + -e 's|@GITWEB_JS@|$(GITWEB_JS)|' \
103 + -e 's|@GITWEB_SITE_HTML_HEAD_STRING@|$(GITWEB_SITE_HTML_HEAD_STRING)|' \
104 + -e 's|@GITWEB_SITE_HEADER@|$(GITWEB_SITE_HEADER)|' \
105 + -e 's|@GITWEB_SITE_FOOTER@|$(GITWEB_SITE_FOOTER)|' \
106 + -e 's|@HIGHLIGHT_BIN@|$(HIGHLIGHT_BIN)|' \
107 + $(MAK_DIR_GITWEB)GITWEB-BUILD-OPTIONS.in >"$@+"
108 @cmp -s $@+ $@ && rm -f $@+ || mv -f $@+ $@
109
110 +$(MAK_DIR_GITWEB)gitweb.cgi: $(MAK_DIR_GITWEB)generate-gitweb-cgi.sh
111 $(MAK_DIR_GITWEB)gitweb.cgi: $(MAK_DIR_GITWEB)GITWEB-BUILD-OPTIONS
112 +$(MAK_DIR_GITWEB)gitweb.cgi: GIT-VERSION-FILE
113 $(MAK_DIR_GITWEB)gitweb.cgi: $(MAK_DIR_GITWEB)gitweb.perl
114 $(QUIET_GEN)$(RM) $@ $@+ && \
114 - sed -e '1s|#!.*perl|#!$(PERL_PATH_SQ)|' \
115 - $(GITWEB_REPLACE) $< >$@+ && \
116 - chmod +x $@+ && \
115 + $(MAK_DIR_GITWEB)generate-gitweb-cgi.sh $(MAK_DIR_GITWEB)/GITWEB-BUILD-OPTIONS ./GIT-VERSION-FILE $< $@+ && \
116 mv $@+ $@
117
118 $(MAK_DIR_GITWEB)static/gitweb.js: $(addprefix $(MAK_DIR_GITWEB),$(GITWEB_JSLIB_FILES))
gitweb/generate-gitweb-cgi.sh new
+47
@@ -0,0 +1,47 @@
1 +#!/bin/sh
2 +
3 +set -e
4 +
5 +if test $# -ne 4
6 +then
7 + echo >&2 "USAGE: $0 <GITWEB-BUILD-OPTIONS> <GIT-VERSION-FILE> <INPUT> <OUTPUT>"
8 + exit 1
9 +fi
10 +
11 +GITWEB_BUILD_OPTIONS="$1"
12 +GIT_VERSION_FILE="$2"
13 +INPUT="$3"
14 +OUTPUT="$4"
15 +
16 +. "$GITWEB_BUILD_OPTIONS"
17 +. "$GIT_VERSION_FILE"
18 +
19 +sed -e "1s|#!/usr/bin/perl|#!$PERL_PATH|" \
20 + -e "s|@PERL_PATH@|$PERL_PATH|" \
21 + -e "s|@JSMIN@|$JSMIN|" \
22 + -e "s|@CSSMIN@|$CSSMIN|" \
23 + -e "s|@GIT_VERSION@|$GIT_VERSION|" \
24 + -e "s|@GIT_BINDIR@|$GIT_BINDIR|" \
25 + -e "s|@GITWEB_CONFIG@|$GITWEB_CONFIG|" \
26 + -e "s|@GITWEB_CONFIG_SYSTEM@|$GITWEB_CONFIG_SYSTEM|" \
27 + -e "s|@GITWEB_CONFIG_COMMON@|$GITWEB_CONFIG_COMMON|" \
28 + -e "s|@GITWEB_HOME_LINK_STR@|$GITWEB_HOME_LINK_STR|" \
29 + -e "s|@GITWEB_SITENAME@|$GITWEB_SITENAME|" \
30 + -e "s|@GITWEB_PROJECTROOT@|$GITWEB_PROJECTROOT|" \
31 + -e "s|@GITWEB_PROJECT_MAXDEPTH@|$GITWEB_PROJECT_MAXDEPTH|" \
32 + -e "s|@GITWEB_EXPORT_OK@|$GITWEB_EXPORT_OK|" \
33 + -e "s|@GITWEB_STRICT_EXPORT@|$GITWEB_STRICT_EXPORT|" \
34 + -e "s|@GITWEB_BASE_URL@|$GITWEB_BASE_URL|" \
35 + -e "s|@GITWEB_LIST@|$GITWEB_LIST|" \
36 + -e "s|@GITWEB_HOMETEXT@|$GITWEB_HOMETEXT|" \
37 + -e "s|@GITWEB_CSS@|$GITWEB_CSS|" \
38 + -e "s|@GITWEB_LOGO@|$GITWEB_LOGO|" \
39 + -e "s|@GITWEB_FAVICON@|$GITWEB_FAVICON|" \
40 + -e "s|@GITWEB_JS@|$GITWEB_JS|" \
41 + -e "s|@GITWEB_SITE_HTML_HEAD_STRING@|$GITWEB_SITE_HTML_HEAD_STRING|" \
42 + -e "s|@GITWEB_SITE_HEADER@|$GITWEB_SITE_HEADER|" \
43 + -e "s|@GITWEB_SITE_FOOTER@|$GITWEB_SITE_FOOTER|" \
44 + -e "s|@HIGHLIGHT_BIN@|$HIGHLIGHT_BIN|" \
45 + "$INPUT" >"$OUTPUT"
46 +
47 +chmod a+x "$OUTPUT"
gitweb/gitweb.perl
+1 -1
@@ -88,7 +88,7 @@ our $projectroot = "@GITWEB_PROJECTROOT@";
88
89 # fs traversing limit for getting project list
90 # the number is relative to the projectroot
91 -our $project_maxdepth = "@GITWEB_PROJECT_MAXDEPTH@";
91 +our $project_maxdepth = @GITWEB_PROJECT_MAXDEPTH@;
92
93 # string of the home link on top of all pages
94 our $home_link_str = "@GITWEB_HOME_LINK_STR@";