Blame


1 c423c56e 2022-09-25 op #!/bin/sh
2 c423c56e 2022-09-25 op #
3 c423c56e 2022-09-25 op # Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
4 c423c56e 2022-09-25 op # Copyright (c) 2017, 2018 Kristaps Dzonsons <kristaps@bsd.lv>
5 c423c56e 2022-09-25 op # Copyright (c) 2022 Omar Polo <op@omarpolo.com>
6 c423c56e 2022-09-25 op #
7 c423c56e 2022-09-25 op # Permission to use, copy, modify, and distribute this software for any
8 c423c56e 2022-09-25 op # purpose with or without fee is hereby granted, provided that the above
9 c423c56e 2022-09-25 op # copyright notice and this permission notice appear in all copies.
10 c423c56e 2022-09-25 op #
11 c423c56e 2022-09-25 op # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 c423c56e 2022-09-25 op # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 c423c56e 2022-09-25 op # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 c423c56e 2022-09-25 op # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 c423c56e 2022-09-25 op # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 c423c56e 2022-09-25 op # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 c423c56e 2022-09-25 op # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 c423c56e 2022-09-25 op
19 c423c56e 2022-09-25 op set -e
20 c423c56e 2022-09-25 op
21 c423c56e 2022-09-25 op if command -v yacc 2>/dev/null >&2; then
22 c423c56e 2022-09-25 op YACC=yacc
23 c423c56e 2022-09-25 op elif command -v bison 2>/dev/null >&2; then
24 c423c56e 2022-09-25 op YACC=bison
25 c423c56e 2022-09-25 op else
26 c423c56e 2022-09-25 op YACC=
27 c423c56e 2022-09-25 op fi
28 c423c56e 2022-09-25 op
29 c423c56e 2022-09-25 op while [ $# -gt 0 ]; do
30 c423c56e 2022-09-25 op key="${1%%=*}"
31 c423c56e 2022-09-25 op val="${1#*=}"
32 c423c56e 2022-09-25 op
33 c423c56e 2022-09-25 op if [ "$1" = "$key" ]; then
34 c423c56e 2022-09-25 op echo "$0: invalid key-value: $1" >&2
35 c423c56e 2022-09-25 op exit 1
36 c423c56e 2022-09-25 op fi
37 c423c56e 2022-09-25 op
38 c423c56e 2022-09-25 op case "$key" in
39 c423c56e 2022-09-25 op CC)
40 c423c56e 2022-09-25 op CC="$val" ;;
41 c423c56e 2022-09-25 op CFLAGS)
42 c423c56e 2022-09-25 op CFLAGS="$val" ;;
43 c423c56e 2022-09-25 op YACC)
44 c423c56e 2022-09-25 op YACC="$val" ;;
45 c423c56e 2022-09-25 op esac
46 c423c56e 2022-09-25 op
47 c423c56e 2022-09-25 op shift
48 c423c56e 2022-09-25 op done
49 c423c56e 2022-09-25 op
50 c423c56e 2022-09-25 op if [ -z "$YACC" ]; then
51 c423c56e 2022-09-25 op echo "fatal: can't find yacc or bison." >&2
52 c423c56e 2022-09-25 op exit 1
53 c423c56e 2022-09-25 op fi
54 c423c56e 2022-09-25 op
55 c423c56e 2022-09-25 op [ -w config.log ] && mv config.log config.log.old
56 c423c56e 2022-09-25 op
57 c423c56e 2022-09-25 op exec 3> config.log
58 c423c56e 2022-09-25 op echo "config.log: writing..."
59 c423c56e 2022-09-25 op
60 c423c56e 2022-09-25 op CC="${CC:-cc}"
61 c423c56e 2022-09-25 op CFLAGS="${CFLAGS:--O2 -pipe} -I."
62 c423c56e 2022-09-25 op LIBS="${LIBS:-}"
63 c423c56e 2022-09-25 op LDFLAGS="${LDFLAGS:-}"
64 c423c56e 2022-09-25 op
65 c423c56e 2022-09-25 op COMPATS=
66 c423c56e 2022-09-25 op
67 c423c56e 2022-09-25 op HAVE_ERR=
68 c423c56e 2022-09-25 op HAVE_FREEZERO=
69 c423c56e 2022-09-25 op HAVE_GETEXECNAME=
70 c423c56e 2022-09-25 op HAVE_GETPROGNAME=
71 c423c56e 2022-09-25 op HAVE_PLEDGE=
72 c423c56e 2022-09-25 op HAVE_REALLOCARRAY=
73 c423c56e 2022-09-25 op HAVE_STRLCAT=
74 c423c56e 2022-09-25 op HAVE_STRLCPY=
75 c423c56e 2022-09-25 op HAVE_STRTONUM=
76 c423c56e 2022-09-25 op HAVE_SYS_QUEUE=
77 c423c56e 2022-09-25 op HAVE_VASPRINTF=
78 c423c56e 2022-09-25 op HAVE___PROGNAME=
79 c423c56e 2022-09-25 op
80 c423c56e 2022-09-25 op # singletest message var extra-cflags extra-libs
81 c423c56e 2022-09-25 op singletest() {
82 c423c56e 2022-09-25 op cat >&3 <<EOF
83 c423c56e 2022-09-25 op ${1}: testing...
84 c423c56e 2022-09-25 op $CC ./../tests/${1}.c -Werror $3 -o test-$1 $LDFLAGS $4
85 c423c56e 2022-09-25 op EOF
86 c423c56e 2022-09-25 op if $CC ./../tests/${1}.c -Werror $3 -o test-$1 $LDFLAGS $4 >&3 2>&3; then
87 c423c56e 2022-09-25 op rm -f test-${1} test-${1}.d
88 c423c56e 2022-09-25 op
89 c423c56e 2022-09-25 op if [ -n "$3" ]; then
90 c423c56e 2022-09-25 op echo "${1}: $CC $3 succeeded" >&3
91 c423c56e 2022-09-25 op echo "${1} ($3): yes"
92 c423c56e 2022-09-25 op elif [ -n "${4}" ]; then
93 c423c56e 2022-09-25 op echo "${1}: $CC $4 succeeded" >&3
94 c423c56e 2022-09-25 op echo "${1} ($4): yes"
95 c423c56e 2022-09-25 op else
96 c423c56e 2022-09-25 op echo "${1}: $CC succeeded" >&3
97 c423c56e 2022-09-25 op echo "${1}: yes"
98 c423c56e 2022-09-25 op fi
99 c423c56e 2022-09-25 op echo >&3
100 c423c56e 2022-09-25 op
101 c423c56e 2022-09-25 op return 0
102 c423c56e 2022-09-25 op fi
103 c423c56e 2022-09-25 op
104 c423c56e 2022-09-25 op if [ -n "$3" ]; then
105 c423c56e 2022-09-25 op echo "${1}: $CC $3 failed with $?" >&3
106 c423c56e 2022-09-25 op echo "${1} ($3): no"
107 c423c56e 2022-09-25 op elif [ -n "${4}" ]; then
108 c423c56e 2022-09-25 op echo "${1}: $CC $4 failed with $?" >&3
109 c423c56e 2022-09-25 op echo "${1} ($4): no"
110 c423c56e 2022-09-25 op else
111 c423c56e 2022-09-25 op echo "${1}: $CC failed with $?" >&3
112 c423c56e 2022-09-25 op echo "${1}: no"
113 c423c56e 2022-09-25 op fi
114 c423c56e 2022-09-25 op echo >&3
115 c423c56e 2022-09-25 op
116 c423c56e 2022-09-25 op return 1
117 c423c56e 2022-09-25 op }
118 c423c56e 2022-09-25 op
119 c423c56e 2022-09-25 op # runtest message var extra-cflags extra-libs pkgconfig-name
120 c423c56e 2022-09-25 op runtest() {
121 c423c56e 2022-09-25 op if singletest "$1" "$2" "" ""; then
122 c423c56e 2022-09-25 op eval HAVE_${2}=1
123 c423c56e 2022-09-25 op return 0
124 c423c56e 2022-09-25 op fi
125 c423c56e 2022-09-25 op
126 c423c56e 2022-09-25 op if [ -n "$3" -o -n "$4" ]; then
127 c423c56e 2022-09-25 op echo "retrying with ${3+$3 }$4" >&3
128 c423c56e 2022-09-25 op if singletest "$1" "$2" "$3" "$4"; then
129 c423c56e 2022-09-25 op if [ -n "$3" ]; then
130 c423c56e 2022-09-25 op CFLAGS="$CFLAGS $3"
131 c423c56e 2022-09-25 op fi
132 c423c56e 2022-09-25 op if [ -n "${4}" ]; then
133 c423c56e 2022-09-25 op LIBS="$LIBS $4"
134 c423c56e 2022-09-25 op fi
135 c423c56e 2022-09-25 op eval HAVE_${2}=1
136 c423c56e 2022-09-25 op return 0
137 c423c56e 2022-09-25 op fi
138 c423c56e 2022-09-25 op fi
139 c423c56e 2022-09-25 op
140 c423c56e 2022-09-25 op if [ -f ./../compat/${1}.c ]; then
141 c423c56e 2022-09-25 op COMPATS="${1}.o $COMPATS"
142 c423c56e 2022-09-25 op fi
143 c423c56e 2022-09-25 op
144 c423c56e 2022-09-25 op eval HAVE_${2}=0
145 c423c56e 2022-09-25 op return 1
146 c423c56e 2022-09-25 op }
147 c423c56e 2022-09-25 op
148 c423c56e 2022-09-25 op if runtest MMD _MMD -MMD >/dev/null; then
149 c423c56e 2022-09-25 op echo "adding -MMD to CFLAGS" >&2
150 c423c56e 2022-09-25 op echo "adding -MMD to CFLAGS" >&3
151 c423c56e 2022-09-25 op fi
152 c423c56e 2022-09-25 op
153 c423c56e 2022-09-25 op runtest err ERR || true
154 c423c56e 2022-09-25 op runtest freezero FREEZERO || true
155 c423c56e 2022-09-25 op runtest getexecname GETEXECNAME || true
156 c423c56e 2022-09-25 op runtest getprogname GETPROGNAME || true
157 c423c56e 2022-09-25 op runtest pledge PLEDGE || true
158 c423c56e 2022-09-25 op runtest reallocarray REALLOCARRAY -D_OPENBSD_SOURCE || true
159 c423c56e 2022-09-25 op runtest strlcat STRLCAT || true
160 c423c56e 2022-09-25 op runtest strlcpy STRLCPY || true
161 c423c56e 2022-09-25 op runtest strtonum STRTONUM || true
162 c423c56e 2022-09-25 op runtest sys_queue SYS_QUEUE || true
163 c423c56e 2022-09-25 op runtest vasprintf VASPRINTF -D_GNU_SOURCE || true
164 c423c56e 2022-09-25 op runtest __progname __PROGNAME || true
165 c423c56e 2022-09-25 op
166 c423c56e 2022-09-25 op if [ "${HAVE_SYS_QUEUE}" -eq 0 ]; then
167 c423c56e 2022-09-25 op CFLAGS="-I ./../compat/sys ${CFLAGS}"
168 c423c56e 2022-09-25 op fi
169 c423c56e 2022-09-25 op
170 c423c56e 2022-09-25 op if [ -n "${COMPATS}" ]; then
171 c423c56e 2022-09-25 op CFLAGS="-I ./../compat/ ${CFLAGS}"
172 c423c56e 2022-09-25 op fi
173 c423c56e 2022-09-25 op
174 c423c56e 2022-09-25 op exec > config.h
175 c423c56e 2022-09-25 op echo "config.h: writing..." >&2
176 c423c56e 2022-09-25 op
177 c423c56e 2022-09-25 op cat <<EOF
178 c423c56e 2022-09-25 op #ifndef CONFIG_H
179 c423c56e 2022-09-25 op #define CONFIG_H
180 c423c56e 2022-09-25 op
181 c423c56e 2022-09-25 op #ifdef __cplusplus
182 c423c56e 2022-09-25 op # error "Do not use C++: this is a C application."
183 c423c56e 2022-09-25 op #endif
184 c423c56e 2022-09-25 op
185 c423c56e 2022-09-25 op #define HAVE_ERR ${HAVE_ERR}
186 c423c56e 2022-09-25 op #define HAVE_FREEZERO ${HAVE_FREEZERO}
187 c423c56e 2022-09-25 op #define HAVE_GETEXECNAME ${HAVE_GETEXECNAME}
188 c423c56e 2022-09-25 op #define HAVE_GETPROGNAME ${HAVE_GETPROGNAME}
189 c423c56e 2022-09-25 op #define HAVE_PLEDGE ${HAVE_PLEDGE}
190 c423c56e 2022-09-25 op #define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY}
191 c423c56e 2022-09-25 op #define HAVE_STRLCAT ${HAVE_STRLCAT}
192 c423c56e 2022-09-25 op #define HAVE_STRLCPY ${HAVE_STRLCPY}
193 c423c56e 2022-09-25 op #define HAVE_STRTONUM ${HAVE_STRTONUM}
194 c423c56e 2022-09-25 op #define HAVE_SYS_QUEUE ${HAVE_SYS_QUEUE}
195 c423c56e 2022-09-25 op #define HAVE_VASPRINTF ${HAVE_VASPRINTF}
196 c423c56e 2022-09-25 op #define HAVE___PROGNAME ${HAVE___PROGNAME}
197 c423c56e 2022-09-25 op
198 c423c56e 2022-09-25 op #endif
199 c423c56e 2022-09-25 op EOF
200 c423c56e 2022-09-25 op
201 c423c56e 2022-09-25 op exec > config.mk
202 c423c56e 2022-09-25 op echo "config.mk: writing..." >&2
203 c423c56e 2022-09-25 op
204 c423c56e 2022-09-25 op cat <<EOF
205 c423c56e 2022-09-25 op CC = ${CC}
206 c423c56e 2022-09-25 op CFLAGS = ${CFLAGS}
207 c423c56e 2022-09-25 op LIBS = ${LIBS}
208 c423c56e 2022-09-25 op LDFLAGS = ${LDFLAGS}
209 c423c56e 2022-09-25 op YACC = ${YACC}
210 c423c56e 2022-09-25 op
211 c423c56e 2022-09-25 op COBJS = ${COMPATS}
212 c423c56e 2022-09-25 op
213 c423c56e 2022-09-25 op INSTALL= install
214 c423c56e 2022-09-25 op INSTALL_PROGRAM=\${INSTALL} -m 0555
215 c423c56e 2022-09-25 op INSTALL_LIB= \${INSTALL} -m 0444
216 c423c56e 2022-09-25 op INSTALL_MAN= \${INSTALL} -m 0444
217 c423c56e 2022-09-25 op INSTALL_DATA= \${INSTALL} -m 0444
218 c423c56e 2022-09-25 op
219 c423c56e 2022-09-25 op EOF
220 c423c56e 2022-09-25 op
221 c423c56e 2022-09-25 op for c in ${COMPATS}; do
222 c423c56e 2022-09-25 op src="../compat/${c%.o}.c"
223 c423c56e 2022-09-25 op cat <<EOF
224 c423c56e 2022-09-25 op $c: $src
225 c423c56e 2022-09-25 op \${CC} \${CFLAGS} -c $src -o \$@
226 c423c56e 2022-09-25 op EOF
227 c423c56e 2022-09-25 op done
228 c423c56e 2022-09-25 op
229 c423c56e 2022-09-25 op echo "done!" >&2
230 c423c56e 2022-09-25 op echo >&2