What's cooking (2024/04 #09)
[alt-git.git] / Make
blob1e357b2f8f3b88c961468592e0b528e1e8cb44cc
1 #!/bin/sh
3 MASTER=master
5 if test -z "$GIT"
6 then
7 case "$(git version 2>/dev/null)" in
8 "git version"*)
9 GIT=git ;;
11 echo >&2 "No git to bootstrap"
12 exit 1 ;;
13 esac
16 inst_prefix=$(
17 IFS=:
18 for p in $PATH
20 probed=${p%/git-active/bin}
21 if test "$probed" != "$p"
22 then
23 echo "$probed"
24 exit
26 done
27 echo $HOME
30 LANG=C
32 for cv in PYTHON_PATH=python TCL_PATH=tclsh TCLTKPATH=wish
34 cmd=${cv#*=}
35 var=${cv%=*}
36 eval $(
37 if test -f "/usr/bin/$cmd"
38 then
39 break
41 for p in /usr/bin /usr/local/bin
43 if test -f "$p/$cmd"
44 then
45 echo "$var=$p/$cmd; export $var"
46 break
48 found=$(find "$p/$cmd"* -type f 2>/dev/null | head -n 1)
49 if test -f "$found"
50 then
51 echo "$var=$found; export $var"
52 break
54 done
56 done
58 tests= jobs= skip= oldtest= with_dash= testpen=
59 clean=:
61 case `uname` in
62 OpenBSD)
63 # O="-fgnu89-inline"
64 skip="t9402"
66 NetBSD)
67 OLD_ICONV=YesPlease; export OLD_ICONV
68 skip="t5000 t9402"
70 FreeBSD)
71 OLD_ICONV=YesPlease; export OLD_ICONV
72 skip="t5560"
74 SunOS)
75 NEEDS_CRYPTO_WITH_SSL=YesPlease ; export NEEDS_CRYPTO_WITH_SSL
76 NO_PEDANTIC=CannotDo
78 esac
80 determine_branch () {
81 expr "$($GIT symbolic-ref --no-recurse HEAD 2>/dev/null ||
82 $GIT symbolic-ref HEAD 2>/dev/null)" : 'refs/heads/\(.*\)' ||
83 echo detached
86 determine_version () {
87 v=`$GIT describe HEAD`
88 expr "$v" : '.*-g[0-9a-f]*$' >/dev/null && {
89 echo >&2 "You are on 'snap' but $v is not an official version."
90 exit 1
92 echo "$v"
95 determine_long_version () {
96 $GIT describe HEAD 2>/dev/null || echo unknown-g00000000 |
97 sed -e 's/-/./g'
100 BUILTIN_CLEAN_FIX=8687f777
101 if ! git merge-base --is-ancestor $BUILTIN_CLEAN_FIX HEAD
102 then
103 NO_PEDANTIC=YesPlease
106 DEVELOPER=
107 case "$NO_PEDANTIC" in
108 ?*) ;;
110 DEVELOPER=1
112 'not-used-anymore')
113 # PEDANT="-Wtypedef-redefinition $PEDANT"
114 PEDANT="-Werror -Wold-style-definition $PEDANT"
115 PEDANT="-Wpointer-arith -Woverflow -Wunused $PEDANT"
116 PEDANT="-Wold-style-declaration -Wstrict-prototypes $PEDANT"
117 PEDANT="-Wstrict-prototypes $PEDANT"
119 esac
121 while case $# in 0) break ;; esac
123 case "$1" in
124 --pedantic)
125 echo >&2 "(no need to say --pedantic)"
127 -j*)
128 case "$NO_JOBS" in
129 ?*) jobs= ;;
130 '') jobs=$1 ;;
131 esac
133 -noprove | --noprove)
134 oldtest=t
136 -loose | --loose)
137 DEVELOPER= PEDANT=
139 --memtrash)
140 testpen=testpen.$$
142 --memtrash=*)
143 testpen=testpen.${1#--memtrash=}
145 --locale=*)
146 LANG=${1#*=}
148 --test=*)
149 tests=$(
150 cd t &&
151 IFS="$IFS,"
152 for t in ${1#*=}
154 eval echo "t$t-*.sh"
155 done | tr '\012' ' '
158 --long)
159 GIT_TEST_LONG=YesPlease
160 export GIT_TEST_LONG
162 --dash)
163 with_dash=y
166 shift
167 break
170 echo >&2 "Eh $1?"
171 exit 1
174 break
176 esac
177 shift
178 done
180 if test -n "$testpen"
181 then
182 for TRASH in /dev/shm /tmp ""
184 if test -n "$TRASH" &&
185 mkdir -p "$TRASH/$testpen" 2>/dev/null &&
186 test -w "$TRASH/$testpen"
187 then
188 testpen=$(cd "$TRASH/$testpen" && /bin/pwd)
189 TRASH="--root=$testpen"
190 clean="$clean; rmdir '$testpen'"
191 break
193 done
194 GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}"
195 export GIT_TEST_OPTS
198 test -f /bin/dash || with_dash=
200 if test -z "$tests" && test -n "$skip"
201 then
202 GIT_SKIP_TESTS="${GIT_SKIP_TESTS:-$skip}"
203 export GIT_SKIP_TESTS
205 if test -z "$oldtest" &&
206 sh -c 'prove --version >/dev/null 2>&1' &&
207 sh -c 'prove --exec : >/dev/null 2>&1'
208 then
209 # --state=slow,save
210 DEFAULT_TEST_TARGET=prove
211 GIT_PROVE_OPTS="${GIT_PROVE_OPTS:+$GIT_PROVE_OPTS }--timer $jobs"
212 export DEFAULT_TEST_TARGET GIT_PROVE_OPTS
215 LC_ALL=$LANG
216 export LANG LC_ALL
218 branch=$(determine_branch)
220 case "$branch" in
221 next | maint | $MASTER | seen | jch)
222 prefix="$inst_prefix/git-$branch"
224 snap)
225 v=$(determine_version)
226 prefix="$inst_prefix/git-snap-$v"
229 prefix="$inst_prefix/git-test" ;;
230 esac
232 clean="$clean; rm -f version"
233 determine_long_version >version
235 set "prefix=$prefix" "$@"
236 if test -n "$with_dash" && test -f /bin/dash
237 then
238 set "SHELL_PATH=/bin/dash" "$@"
241 if grep >/dev/null DC_SHA1 Makefile
242 then
243 SHA1IMPLEMENTATION=DC_SHA1=YesPlease
244 elif grep >/dev/null BLK_SHA1 Makefile
245 then
246 SHA1IMPLEMENTATION=BLK_SHA1=YesPlease
247 else
248 SHA1IMPLEMENTATION=
251 if test -f sha256/nettle.h && test -f /usr/include/nettle/sha2.h
252 then
253 SHA1IMPLEMENTATION="$SHA1IMPLEMENTATION NETTLE_SHA256=YesPlease"
256 set MAN_BASE_URL='"http://www.kernel.org/pub/software/scm/git/docs/"' \
257 MAN_BOLD_LITERAL=YesPlease \
258 $SHA1IMPLEMENTATION \
259 GNU_ROFF=YesPlease \
260 USE_LIBPCRE=YesPlease \
261 "$@"
263 # Platform hack
264 if test -z "${make:+set}" && {
265 test -x /usr/local/bin/gmake ||
266 test -x /usr/pkg/bin/gmake ||
267 test -x /usr/bin/gmake
269 then
270 make=gmake
272 if test -f /bin/ginstall
273 then
274 set INSTALL=ginstall "$@"
277 unset SSH_AGENT_PID SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION \
278 GPG_AGENT_INFO GNOME_KEYRING_CONTROL GNOME_KEYRING_PID \
279 XDG_SESSION_COOKIE XDG_SESSION_PATH XDG_SEAT_PATH XDG_DATA_DIRS \
280 PGPPATH AUTO_PROXY WINDOWID SESSION_MANAGER XDG_CONFIG_DIRS STY \
281 GDMSESSION KRB5CCNAME GNOME_DESKTOP_SESSION_ID \
282 DBUS_SESSION_BUS_ADDRESS LESSOPEN WINDOW DISPLAY GTK_IM_MODULE \
283 XDG_CURRENT_DESKTOP LESSCLOSE XAUTHORITY
285 # O=-fsanitize=address Meta/Make
287 ${make-make} \
288 $jobs \
289 ETC_GITCONFIG=$prefix/etc/gitconfig \
290 ${DEVELOPER:+"DEVELOPER=YesPlease"} \
291 SPATCH_FLAGS="--all-includes --recursive-includes --patch ." \
292 SPATCH_BATCH_SIZE=16 \
293 CFLAGS="-g -Wall -Wunused -Wdeclaration-after-statement -std=gnu99${O:+ $O}" \
294 ${tests:+"T=$tests"} ${tests:+UNIT_TESTS=} \
295 "$@"
296 status=$?
297 eval "$clean"
298 exit $status