Raw
1 #!/bin/sh
2
3 MASTER=master
4
5 if test -z "$GIT"
6 then
7 case "$(git version 2>/dev/null)" in
8 "git version"*)
9 GIT=git ;;
10 *)
11 echo >&2 "No git to bootstrap"
12 exit 1 ;;
13 esac
14 fi
15
16 inst_prefix=$(
17 IFS=:
18 for p in $PATH
19 do
20 probed=${p%/git-active/bin}
21 if test "$probed" != "$p"
22 then
23 echo "$probed"
24 exit
25 fi
26 done
27 echo $HOME
28 )
29
30 LANG=C
31
32 for cv in PYTHON_PATH=python TCL_PATH=tclsh TCLTKPATH=wish
33 do
34 cmd=${cv#*=}
35 var=${cv%=*}
36 eval $(
37 if test -f "/usr/bin/$cmd"
38 then
39 break
40 fi
41 for p in /usr/bin /usr/local/bin
42 do
43 if test -f "$p/$cmd"
44 then
45 echo "$var=$p/$cmd; export $var"
46 break
47 fi
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
53 fi
54 done
55 )
56 done
57
58 tests= jobs= oldtest= with_shell= testpen= silent=
59 clean=:
60
61 determine_branch () {
62 expr "$($GIT symbolic-ref --no-recurse HEAD 2>/dev/null ||
63 $GIT symbolic-ref HEAD 2>/dev/null)" : 'refs/heads/\(.*\)' ||
64 echo detached
65 }
66
67 determine_version () {
68 v=`$GIT describe HEAD`
69 expr "$v" : '.*-g[0-9a-f]*$' >/dev/null && {
70 echo >&2 "You are on 'snap' but $v is not an official version."
71 exit 1
72 }
73 echo "$v"
74 }
75
76 determine_long_version () {
77 $GIT describe HEAD 2>/dev/null || echo unknown-g00000000 |
78 sed -e 's/-/./g'
79 }
80
81 BUILTIN_CLEAN_FIX=8687f777
82 if ! git merge-base --is-ancestor $BUILTIN_CLEAN_FIX HEAD
83 then
84 NO_PEDANTIC=YesPlease
85 fi
86
87 DEVELOPER=
88 case "$NO_PEDANTIC" in
89 ?*) ;;
90 '')
91 DEVELOPER=1
92 ;;
93 'not-used-anymore')
94 # PEDANT="-Wtypedef-redefinition $PEDANT"
95 PEDANT="-Werror -Wold-style-definition $PEDANT"
96 PEDANT="-Wpointer-arith -Woverflow -Wunused $PEDANT"
97 PEDANT="-Wold-style-declaration -Wstrict-prototypes $PEDANT"
98 PEDANT="-Wstrict-prototypes $PEDANT"
99 ;;
100 esac
101
102 while case $# in 0) break ;; esac
103 do
104 case "$1" in
105 --pedantic)
106 echo >&2 "(no need to say --pedantic)"
107 ;;
108 -j*)
109 case "$NO_JOBS" in
110 ?*) jobs= ;;
111 '') jobs=$1 ;;
112 esac
113 ;;
114 -s)
115 silent=-s
116 ;;
117 -noprove | --noprove)
118 oldtest=t
119 ;;
120 -loose | --loose)
121 DEVELOPER= PEDANT=
122 ;;
123 --memtrash)
124 testpen=testpen.$$
125 ;;
126 --memtrash=*)
127 testpen=testpen.${1#--memtrash=}
128 ;;
129 --locale=*)
130 LANG=${1#*=}
131 ;;
132 --test=*)
133 tests=$(
134 cd t &&
135 IFS="$IFS,"
136 for t in ${1#*=}
137 do
138 eval echo "t$t-*.sh"
139 done | tr '\012' ' '
140 )
141 ;;
142 --long)
143 GIT_TEST_LONG=YesPlease
144 export GIT_TEST_LONG
145 ;;
146 --bash)
147 with_shell=/bin/bash
148 ;;
149 --dash)
150 with_shell=/bin/dash
151 ;;
152 --ksh)
153 with_shell=/bin/ksh
154 ;;
155 --)
156 shift
157 break
158 ;;
159 -*)
160 echo >&2 "Eh $1?"
161 exit 1
162 ;;
163 *)
164 break
165 ;;
166 esac
167 shift
168 done
169
170 if test -n "$testpen"
171 then
172 for TRASH in /dev/shm /tmp ""
173 do
174 if test -n "$TRASH" &&
175 mkdir -p "$TRASH/$testpen" 2>/dev/null &&
176 test -w "$TRASH/$testpen"
177 then
178 testpen=$(cd "$TRASH/$testpen" && /bin/pwd)
179 TRASH="--root=$testpen"
180 clean="$clean; rmdir '$testpen'"
181 break
182 fi
183 done
184 GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}"
185 export GIT_TEST_OPTS
186 fi
187
188 if test -z "$oldtest" &&
189 sh -c 'prove --version >/dev/null 2>&1' &&
190 sh -c 'prove --exec : >/dev/null 2>&1'
191 then
192 # --state=slow,save
193 DEFAULT_TEST_TARGET=prove
194 GIT_PROVE_OPTS="${GIT_PROVE_OPTS:+$GIT_PROVE_OPTS }--timer $jobs"
195 export DEFAULT_TEST_TARGET GIT_PROVE_OPTS
196 fi
197
198 LC_ALL=$LANG
199 export LANG LC_ALL
200
201 branch=$(determine_branch)
202
203 case "$branch" in
204 next | maint | $MASTER | seen | jch)
205 prefix="$inst_prefix/git-$branch"
206 ;;
207 snap)
208 v=$(determine_version)
209 prefix="$inst_prefix/git-snap-$v"
210 ;;
211 *)
212 prefix="$inst_prefix/git-test" ;;
213 esac
214
215 clean="$clean; rm -f version"
216 determine_long_version >version
217
218 set "prefix=$prefix" "$@"
219 if test -n "$with_shell" && test -f "$with_shell"
220 then
221 set "SHELL_PATH=$with_shell" "SHELL=$with_shell" "$@"
222 fi
223
224 if grep >/dev/null DC_SHA1 Makefile
225 then
226 SHA1IMPLEMENTATION=DC_SHA1=YesPlease
227 elif grep >/dev/null BLK_SHA1 Makefile
228 then
229 SHA1IMPLEMENTATION=BLK_SHA1=YesPlease
230 else
231 SHA1IMPLEMENTATION=
232 fi
233
234 if test -f sha256/nettle.h && test -f /usr/include/nettle/sha2.h
235 then
236 SHA1IMPLEMENTATION="$SHA1IMPLEMENTATION NETTLE_SHA256=YesPlease"
237 fi
238
239 set MAN_BASE_URL='"http://www.kernel.org/pub/software/scm/git/docs/"' \
240 $SHA1IMPLEMENTATION \
241 USE_ASCIIDOCTOR=YesPlease \
242 USE_LIBPCRE=YesPlease \
243 "$@"
244
245 # Platform hack
246 if test -z "${make:+set}" && {
247 test -x /usr/local/bin/gmake ||
248 test -x /usr/pkg/bin/gmake ||
249 test -x /usr/bin/gmake
250 }
251 then
252 make=gmake
253 fi
254 if test -f /bin/ginstall
255 then
256 set INSTALL=ginstall "$@"
257 fi
258
259 GIT_SKIP_TESTS=${GIT_SKIP_TESTS:+"$GIT_SKIP_TESTS "}"t9999"
260 export GIT_SKIP_TESTS
261
262 unset SSH_AGENT_PID SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION \
263 GPG_AGENT_INFO GNOME_KEYRING_CONTROL GNOME_KEYRING_PID \
264 XDG_SESSION_COOKIE XDG_SESSION_PATH XDG_SEAT_PATH XDG_DATA_DIRS \
265 PGPPATH AUTO_PROXY WINDOWID SESSION_MANAGER XDG_CONFIG_DIRS STY \
266 GDMSESSION KRB5CCNAME GNOME_DESKTOP_SESSION_ID \
267 DBUS_SESSION_BUS_ADDRESS LESSOPEN WINDOW DISPLAY GTK_IM_MODULE \
268 XDG_CURRENT_DESKTOP LESSCLOSE XAUTHORITY
269
270 # O=-fsanitize=address Meta/Make
271
272 ${make-make} \
273 $jobs \
274 $silent \
275 ETC_GITCONFIG=$prefix/etc/gitconfig \
276 ${DEVELOPER:+"DEVELOPER=YesPlease"} \
277 SPATCH_FLAGS="--all-includes --recursive-includes --patch ." \
278 SPATCH_BATCH_SIZE=16 \
279 CFLAGS="-g -Wdeclaration-after-statement ${O:+ $O}" \
280 ${tests:+"T=$tests"} ${tests:+UNIT_TESTS=} \
281 "$@"
282 status=$?
283 eval "$clean"
284 exit $status