What's cooking (2021/06 #06)
[git] / Make
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= skip= oldtest= with_dash= testpen=
59 clean=:
60
61 case `uname` in
62 OpenBSD)
63         # O="-fgnu89-inline"
64         skip="t9402"
65         ;;
66 NetBSD)
67         OLD_ICONV=YesPlease; export OLD_ICONV
68         skip="t5000 t9402"
69         ;;
70 FreeBSD)
71         OLD_ICONV=YesPlease; export OLD_ICONV
72         skip="t5560"
73         ;;
74 SunOS)
75         NEEDS_CRYPTO_WITH_SSL=YesPlease ; export NEEDS_CRYPTO_WITH_SSL
76         NO_PEDANTIC=CannotDo
77         ;;
78 esac
79
80 determine_branch () {
81         expr "$($GIT symbolic-ref HEAD 2>/dev/null)" : 'refs/heads/\(.*\)' ||
82         echo detached
83 }
84
85 determine_version () {
86         v=`$GIT describe HEAD`
87         expr "$v" : '.*-g[0-9a-f]*$' >/dev/null && {
88                 echo >&2 "You are on 'snap' but $v is not an official version."
89                 exit 1
90         }
91         echo "$v"
92 }
93
94 determine_long_version () {
95         $GIT describe HEAD 2>/dev/null || echo unknown-g00000000 |
96         sed -e 's/-/./g'
97 }
98
99 BUILTIN_CLEAN_FIX=8687f777
100 if ! git merge-base --is-ancestor $BUILTIN_CLEAN_FIX HEAD
101 then
102         NO_PEDANTIC=YesPlease
103 fi
104
105 DEVELOPER=
106 case "$NO_PEDANTIC" in
107 ?*)     ;;
108 '')
109         DEVELOPER=1
110         ;;
111 'not-used-anymore')
112         # PEDANT="-Wtypedef-redefinition $PEDANT"
113         PEDANT="-Werror -Wold-style-definition $PEDANT"
114         PEDANT="-Wpointer-arith -Woverflow -Wunused $PEDANT"
115         PEDANT="-Wold-style-declaration -Wstrict-prototypes $PEDANT"
116         PEDANT="-Wstrict-prototypes $PEDANT"
117         ;;
118 esac
119
120 while case $# in 0) break ;; esac
121 do 
122         case "$1" in
123         --pedantic)
124                 echo >&2 "(no need to say --pedantic)"
125                 ;;
126         -j*)
127                 case "$NO_JOBS" in
128                 ?*)     jobs= ;;
129                 '')     jobs=$1 ;;
130                 esac
131                 ;;
132         -noprove | --noprove)
133                 oldtest=t
134                 ;;
135         -loose | --loose)
136                 DEVELOPER= PEDANT=
137                 ;;
138         --memtrash)
139                 testpen=testpen.$$
140                 ;;
141         --memtrash=*)
142                 testpen=testpen.${1#--memtrash=}
143                 ;;
144         --locale=*)
145                 LANG=${1#*=}
146                 ;;
147         --test=*)
148                 tests=$(
149                         cd t &&
150                         IFS="$IFS,"
151                         for t in ${1#*=}
152                         do
153                                 eval echo "t$t-*.sh"
154                         done | tr '\012' ' '
155                 )
156                 ;;
157         --long)
158                 GIT_TEST_LONG=YesPlease
159                 export GIT_TEST_LONG
160                 ;;
161         --dash)
162                 with_dash=y
163                 ;;
164         --)
165                 shift
166                 break
167                 ;;
168         -*)
169                 echo >&2 "Eh $1?"
170                 exit 1
171                 ;;
172         *)
173                 break
174                 ;;              
175         esac
176         shift
177 done
178
179 if test -n "$testpen"
180 then
181         for TRASH in /dev/shm /tmp ""
182         do
183                 if test -n "$TRASH" &&
184                    mkdir -p "$TRASH/$testpen" 2>/dev/null &&
185                    test -w "$TRASH/$testpen"
186                 then
187                         testpen=$(cd "$TRASH/$testpen" && /bin/pwd)
188                         TRASH="--root=$testpen"
189                         clean="$clean; rmdir '$testpen'"
190                         break
191                 fi
192         done
193         GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}"
194         export GIT_TEST_OPTS
195 fi
196
197 test -f /bin/dash || with_dash=
198
199 if test -z "$tests" && test -n "$skip"
200 then
201         GIT_SKIP_TESTS="${GIT_SKIP_TESTS:-$skip}"
202         export GIT_SKIP_TESTS
203 fi
204 if test -z "$oldtest" &&
205    sh -c 'prove --version >/dev/null 2>&1' &&
206    sh -c 'prove --exec : >/dev/null 2>&1'
207 then
208         # --state=slow,save
209         DEFAULT_TEST_TARGET=prove
210         GIT_PROVE_OPTS="${GIT_PROVE_OPTS:+$GIT_PROVE_OPTS }--timer $jobs"
211         export DEFAULT_TEST_TARGET GIT_PROVE_OPTS
212 fi
213
214 LC_ALL=$LANG
215 export LANG LC_ALL
216
217 branch=$(determine_branch)
218
219 case "$branch" in
220 next | maint | $MASTER | seen | jch)
221         prefix="$inst_prefix/git-$branch"
222         ;;
223 snap)
224         v=$(determine_version)
225         prefix="$inst_prefix/git-snap-$v"
226         ;;
227 *)
228         prefix="$inst_prefix/git-test" ;;
229 esac
230
231 clean="$clean; rm -f version"
232 determine_long_version >version
233
234 set "prefix=$prefix" "$@"
235 if test -n "$with_dash" && test -f /bin/dash
236 then
237         set "SHELL_PATH=/bin/dash" "$@"
238 fi
239
240 if grep >/dev/null DC_SHA1 Makefile
241 then
242         SHA1IMPLEMENTATION=DC_SHA1=YesPlease
243 elif grep >/dev/null BLK_SHA1 Makefile
244 then
245         SHA1IMPLEMENTATION=BLK_SHA1=YesPlease
246 else
247         SHA1IMPLEMENTATION=
248 fi
249
250 set     MAN_BASE_URL='"http://www.kernel.org/pub/software/scm/git/docs/"' \
251         MAN_BOLD_LITERAL=YesPlease \
252         $SHA1IMPLEMENTATION \
253         GNU_ROFF=YesPlease \
254         "$@"
255
256 # Platform hack
257 if test -z "${make:+set}" && {
258         test -x /usr/local/bin/gmake ||
259         test -x /usr/pkg/bin/gmake ||
260         test -x /usr/bin/gmake
261 }
262 then
263         make=gmake
264 fi
265 if test -f /bin/ginstall
266 then
267         set INSTALL=ginstall "$@"
268 fi
269
270 unset   SSH_AGENT_PID SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION \
271         GPG_AGENT_INFO GNOME_KEYRING_CONTROL GNOME_KEYRING_PID \
272         XDG_SESSION_COOKIE XDG_SESSION_PATH XDG_SEAT_PATH  XDG_DATA_DIRS \
273         PGPPATH AUTO_PROXY WINDOWID SESSION_MANAGER XDG_CONFIG_DIRS STY \
274         GDMSESSION KRB5CCNAME GNOME_DESKTOP_SESSION_ID \
275         DBUS_SESSION_BUS_ADDRESS LESSOPEN WINDOW DISPLAY GTK_IM_MODULE \
276         XDG_CURRENT_DESKTOP LESSCLOSE XAUTHORITY
277
278 # O=-fsanitize=address Meta/Make
279
280 ${make-make} \
281      $jobs \
282      ETC_GITCONFIG=$prefix/etc/gitconfig \
283      ${DEVELOPER:+"DEVELOPER=YesPlease"} \
284      ${O:+CFLAGS="-g -Wall $O"} \
285      ${tests:+"T=$tests"} \
286      "$@"
287 status=$?
288 eval "$clean"
289 exit $status