3 83f0f95a 2022-09-29 op # Copyright (c) 2014, 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
4 83f0f95a 2022-09-29 op # Copyright (c) 2017, 2018 Kristaps Dzonsons <kristaps@bsd.lv>
5 83f0f95a 2022-09-29 op # Copyright (c) 2022 Omar Polo <op@omarpolo.com>
7 83f0f95a 2022-09-29 op # Permission to use, copy, modify, and distribute this software for any
8 83f0f95a 2022-09-29 op # purpose with or without fee is hereby granted, provided that the above
9 83f0f95a 2022-09-29 op # copyright notice and this permission notice appear in all copies.
11 83f0f95a 2022-09-29 op # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 83f0f95a 2022-09-29 op # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 83f0f95a 2022-09-29 op # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 83f0f95a 2022-09-29 op # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 83f0f95a 2022-09-29 op # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 83f0f95a 2022-09-29 op # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 83f0f95a 2022-09-29 op # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 83f0f95a 2022-09-29 op if command -v yacc 2>/dev/null >&2; then
23 83f0f95a 2022-09-29 op elif command -v bison 2>/dev/null >&2; then
29 83f0f95a 2022-09-29 op while [ $# -gt 0 ]; do
30 83f0f95a 2022-09-29 op key="${1%%=*}"
33 83f0f95a 2022-09-29 op if [ "$1" = "$key" ]; then
34 83f0f95a 2022-09-29 op echo "$0: invalid key-value: $1" >&2
38 83f0f95a 2022-09-29 op case "$key" in
42 83f0f95a 2022-09-29 op CFLAGS="$val" ;;
44 83f0f95a 2022-09-29 op YACC="$val" ;;
50 83f0f95a 2022-09-29 op if [ -z "$YACC" ]; then
51 83f0f95a 2022-09-29 op echo "fatal: can't find yacc or bison." >&2
55 83f0f95a 2022-09-29 op [ -w config.log ] && mv config.log config.log.old
57 83f0f95a 2022-09-29 op exec 3> config.log
58 83f0f95a 2022-09-29 op echo "config.log: writing..."
60 83f0f95a 2022-09-29 op CC="${CC:-cc}"
61 83f0f95a 2022-09-29 op CFLAGS="${CFLAGS:--O2 -pipe} -I."
62 83f0f95a 2022-09-29 op LIBS="${LIBS:-}"
63 83f0f95a 2022-09-29 op LDFLAGS="${LDFLAGS:-}"
68 83f0f95a 2022-09-29 op HAVE_FREEZERO=
69 83f0f95a 2022-09-29 op HAVE_GETEXECNAME=
70 83f0f95a 2022-09-29 op HAVE_GETPROGNAME=
72 83f0f95a 2022-09-29 op HAVE_REALLOCARRAY=
75 83f0f95a 2022-09-29 op HAVE_STRTONUM=
76 83f0f95a 2022-09-29 op HAVE_SYS_QUEUE=
77 83f0f95a 2022-09-29 op HAVE_VASPRINTF=
78 83f0f95a 2022-09-29 op HAVE___PROGNAME=
80 83f0f95a 2022-09-29 op # singletest message var extra-cflags extra-libs
81 83f0f95a 2022-09-29 op singletest() {
83 83f0f95a 2022-09-29 op ${1}: testing...
84 83f0f95a 2022-09-29 op $CC ./../tests/${1}.c -Werror $3 -o test-$1 $LDFLAGS $4
86 83f0f95a 2022-09-29 op if $CC ./../tests/${1}.c -Werror $3 -o test-$1 $LDFLAGS $4 >&3 2>&3; then
87 83f0f95a 2022-09-29 op rm -f test-${1} test-${1}.d
89 83f0f95a 2022-09-29 op if [ -n "$3" ]; then
90 83f0f95a 2022-09-29 op echo "${1}: $CC $3 succeeded" >&3
91 83f0f95a 2022-09-29 op echo "${1} ($3): yes"
92 83f0f95a 2022-09-29 op elif [ -n "${4}" ]; then
93 83f0f95a 2022-09-29 op echo "${1}: $CC $4 succeeded" >&3
94 83f0f95a 2022-09-29 op echo "${1} ($4): yes"
96 83f0f95a 2022-09-29 op echo "${1}: $CC succeeded" >&3
97 83f0f95a 2022-09-29 op echo "${1}: yes"
104 83f0f95a 2022-09-29 op if [ -n "$3" ]; then
105 83f0f95a 2022-09-29 op echo "${1}: $CC $3 failed with $?" >&3
106 83f0f95a 2022-09-29 op echo "${1} ($3): no"
107 83f0f95a 2022-09-29 op elif [ -n "${4}" ]; then
108 83f0f95a 2022-09-29 op echo "${1}: $CC $4 failed with $?" >&3
109 83f0f95a 2022-09-29 op echo "${1} ($4): no"
111 83f0f95a 2022-09-29 op echo "${1}: $CC failed with $?" >&3
112 83f0f95a 2022-09-29 op echo "${1}: no"
119 83f0f95a 2022-09-29 op # runtest message var extra-cflags extra-libs pkgconfig-name
121 83f0f95a 2022-09-29 op if singletest "$1" "$2" "" ""; then
122 83f0f95a 2022-09-29 op eval HAVE_${2}=1
126 83f0f95a 2022-09-29 op if [ -n "$3" -o -n "$4" ]; then
127 83f0f95a 2022-09-29 op echo "retrying with ${3+$3 }$4" >&3
128 83f0f95a 2022-09-29 op if singletest "$1" "$2" "$3" "$4"; then
129 83f0f95a 2022-09-29 op if [ -n "$3" ]; then
130 83f0f95a 2022-09-29 op CFLAGS="$CFLAGS $3"
132 83f0f95a 2022-09-29 op if [ -n "${4}" ]; then
133 83f0f95a 2022-09-29 op LIBS="$LIBS $4"
135 83f0f95a 2022-09-29 op eval HAVE_${2}=1
140 83f0f95a 2022-09-29 op if [ -f ./../compat/${1}.c ]; then
141 83f0f95a 2022-09-29 op COMPATS="${1}.o $COMPATS"
144 83f0f95a 2022-09-29 op eval HAVE_${2}=0
148 83f0f95a 2022-09-29 op if runtest MMD _MMD -MMD >/dev/null; then
149 83f0f95a 2022-09-29 op echo "adding -MMD to CFLAGS" >&2
150 83f0f95a 2022-09-29 op echo "adding -MMD to CFLAGS" >&3
153 83f0f95a 2022-09-29 op runtest err ERR || true
154 83f0f95a 2022-09-29 op runtest freezero FREEZERO || true
155 83f0f95a 2022-09-29 op runtest getexecname GETEXECNAME || true
156 83f0f95a 2022-09-29 op runtest getprogname GETPROGNAME || true
157 83f0f95a 2022-09-29 op runtest pledge PLEDGE || true
158 83f0f95a 2022-09-29 op runtest reallocarray REALLOCARRAY -D_OPENBSD_SOURCE || true
159 83f0f95a 2022-09-29 op runtest strlcat STRLCAT || true
160 83f0f95a 2022-09-29 op runtest strlcpy STRLCPY || true
161 83f0f95a 2022-09-29 op runtest strtonum STRTONUM || true
162 83f0f95a 2022-09-29 op runtest sys_queue SYS_QUEUE || true
163 83f0f95a 2022-09-29 op runtest vasprintf VASPRINTF -D_GNU_SOURCE || true
164 83f0f95a 2022-09-29 op runtest __progname __PROGNAME || true
166 83f0f95a 2022-09-29 op if [ "${HAVE_SYS_QUEUE}" -eq 0 ]; then
167 83f0f95a 2022-09-29 op CFLAGS="-I ./../compat/sys ${CFLAGS}"
170 83f0f95a 2022-09-29 op if [ -n "${COMPATS}" ]; then
171 83f0f95a 2022-09-29 op CFLAGS="-I ./../compat/ ${CFLAGS}"
174 83f0f95a 2022-09-29 op exec > config.h
175 83f0f95a 2022-09-29 op echo "config.h: writing..." >&2
178 83f0f95a 2022-09-29 op #ifndef CONFIG_H
179 83f0f95a 2022-09-29 op #define CONFIG_H
181 83f0f95a 2022-09-29 op #ifdef __cplusplus
182 83f0f95a 2022-09-29 op # error "Do not use C++: this is a C application."
185 83f0f95a 2022-09-29 op #define HAVE_ERR ${HAVE_ERR}
186 83f0f95a 2022-09-29 op #define HAVE_FREEZERO ${HAVE_FREEZERO}
187 83f0f95a 2022-09-29 op #define HAVE_GETEXECNAME ${HAVE_GETEXECNAME}
188 83f0f95a 2022-09-29 op #define HAVE_GETPROGNAME ${HAVE_GETPROGNAME}
189 83f0f95a 2022-09-29 op #define HAVE_PLEDGE ${HAVE_PLEDGE}
190 83f0f95a 2022-09-29 op #define HAVE_REALLOCARRAY ${HAVE_REALLOCARRAY}
191 83f0f95a 2022-09-29 op #define HAVE_STRLCAT ${HAVE_STRLCAT}
192 83f0f95a 2022-09-29 op #define HAVE_STRLCPY ${HAVE_STRLCPY}
193 83f0f95a 2022-09-29 op #define HAVE_STRTONUM ${HAVE_STRTONUM}
194 83f0f95a 2022-09-29 op #define HAVE_SYS_QUEUE ${HAVE_SYS_QUEUE}
195 83f0f95a 2022-09-29 op #define HAVE_VASPRINTF ${HAVE_VASPRINTF}
196 83f0f95a 2022-09-29 op #define HAVE___PROGNAME ${HAVE___PROGNAME}
201 83f0f95a 2022-09-29 op exec > config.mk
202 83f0f95a 2022-09-29 op echo "config.mk: writing..." >&2
206 83f0f95a 2022-09-29 op CFLAGS = ${CFLAGS}
207 83f0f95a 2022-09-29 op LIBS = ${LIBS}
208 83f0f95a 2022-09-29 op LDFLAGS = ${LDFLAGS}
209 83f0f95a 2022-09-29 op YACC = ${YACC}
211 83f0f95a 2022-09-29 op COBJS = ${COMPATS}
213 83f0f95a 2022-09-29 op INSTALL= install
214 83f0f95a 2022-09-29 op INSTALL_PROGRAM=\${INSTALL} -m 0555
215 83f0f95a 2022-09-29 op INSTALL_LIB= \${INSTALL} -m 0444
216 83f0f95a 2022-09-29 op INSTALL_MAN= \${INSTALL} -m 0444
217 83f0f95a 2022-09-29 op INSTALL_DATA= \${INSTALL} -m 0444
221 83f0f95a 2022-09-29 op for c in ${COMPATS}; do
222 83f0f95a 2022-09-29 op src="../compat/${c%.o}.c"
225 83f0f95a 2022-09-29 op \${CC} \${CFLAGS} -c $src -o \$@
229 83f0f95a 2022-09-29 op echo "done!" >&2