2 # Based on the configure script from musl libc, MIT licensed
6 Usage: $0 [OPTION]... [VAR=VALUE]...
8 To assign environment variables (e.g., CC, CFLAGS...), specify them as
9 VAR=VALUE. See below for descriptions of some of the useful variables.
11 Defaults for the options are specified in brackets.
14 --srcdir=DIR source directory [detected]
16 Installation directories:
17 --prefix=PREFIX main installation prefix [/usr/local]
18 --exec-prefix=EPREFIX installation prefix for executable files [PREFIX]
20 Fine tuning of the installation directories:
21 --bindir=DIR user executables [EPREFIX/bin]
22 --sharedir=DIR share directories [PREFIX/share]
23 --docdir=DIR misc. documentation [PREFIX/share/doc]
24 --mandir=DIR man pages [PREFIX/share/man]
27 --enable-curses build with Curses terminal output [yes]
28 --enable-lua build with Lua support [auto]
29 --enable-lpeg-static build with LPeg static linking [auto]
30 --enable-tre build with TRE regex support [auto]
31 --enable-selinux build with SELinux support [auto]
32 --enable-acl build with POSIX ACL support [auto]
33 --enable-help build with built-in help texts [yes]
35 Some influential environment variables:
36 CC C compiler command [detected]
37 CFLAGS C compiler flags [-Os -pipe ...]
40 Use these variables to override the choices made by configure.
49 tr '\n' ' ' <<EOF | grep '^[-[:alnum:]_=,./:]* $' >/dev/null 2>&1 && { echo "$1" ; return 0 ; }
52 printf %s
\\n
"$1" |
sed -e "s/'/'\\\\''/g" -e "1s/^/'/" -e "\$s/\$/'/" -e "s#^'\([-[:alnum:]_,./:]*\)=\(.*\)\$#\1='\2#"
54 echo () { printf "%s\n" "$*" ; }
55 fail
() { echo "$*" ; exit 1 ; }
56 fnmatch
() { eval "case \"\$2\" in $1) return 0 ;; *) return 1 ;; esac" ; }
57 cmdexists
() { type "$1" >/dev
/null
2>&1 ; }
58 trycc
() { test -z "$CC" && cmdexists
"$1" && CC
=$1 ; }
61 while eval "fnmatch '*/' \"\${$1}\"" ; do eval "$1=\${$1%/}" ; done
65 printf "checking preprocessor condition %s... " "$1"
66 echo "typedef int x;" > "$tmpc"
67 echo "#if $1" >> "$tmpc"
68 echo "#error yes" >> "$tmpc"
69 echo "#endif" >> "$tmpc"
70 if $CC $2 -c -o "$tmpo" "$tmpc" >/dev
/null
2>&1 ; then
80 printf "checking whether compiler accepts %s... " "$2"
81 echo "typedef int x;" > "$tmpc"
82 if $CC $CFLAGS_TRY $2 -c -o "$tmpo" "$tmpc" >/dev
/null
2>&1 ; then
84 eval "$1=\"\${$1} \$2\""
94 printf "checking whether linker accepts %s... " "$2"
95 echo "typedef int x;" > "$tmpc"
96 if $CC $LDFLAGS_TRY -nostdlib -shared "$2" -o "$tmpo" "$tmpc" >/dev
/null
2>&1 ; then
98 eval "$1=\"\${$1} \$2\""
107 # Beginning of actual script
115 EXEC_PREFIX
='$(PREFIX)'
116 BINDIR
='$(EXEC_PREFIX)/bin'
117 SHAREDIR
='$(PREFIX)/share'
118 DOCDIR
='$(PREFIX)/share/doc'
119 MANDIR
='$(PREFIX)/share/man'
132 --srcdir=*) SRCDIR
=${arg#*=} ;;
133 --prefix=*) PREFIX
=${arg#*=} ;;
134 --exec-prefix=*) EXEC_PREFIX
=${arg#*=} ;;
135 --bindir=*) BINDIR
=${arg#*=} ;;
136 --sharedir=*) SHAREDIR
=${arg#*=} ;;
137 --docdir=*) DOCDIR
=${arg#*=} ;;
138 --mandir=*) MANDIR
=${arg#*=} ;;
139 --environment-only) environmentonly
=yes ;;
140 --enable-help|
--enable-help=yes) help=yes ;;
141 --disable-help|
--enable-help=no
) help=no
;;
142 --enable-curses|
--enable-curses=yes) curses
=yes ;;
143 --disable-curses|
--enable-curses=no
) curses
=no
;;
144 --enable-lua|
--enable-lua=yes) lua
=yes ;;
145 --disable-lua|
--enable-lua=no
) lua
=no
;;
146 --enable-lpeg-static|
--enable-lpeg-static=yes) lpeg
=yes ;;
147 --disable-lpeg-static|
--enable-lpeg-static=no
) lpeg
=no
;;
148 --enable-tre|
--enable-tre=yes) tre
=yes ;;
149 --disable-tre|
--enable-tre=no
) tre
=no
;;
150 --enable-selinux|
--enable-selinux=yes) selinux
=yes ;;
151 --disable-selinux|
--enable-selinux=no
) selinux
=no
;;
152 --enable-acl|
--enable-acl=yes) acl
=yes ;;
153 --disable-acl|
--enable-acl=no
) acl
=no
;;
154 --enable-*|
--disable-*|
--with-*|
--without-*|
--*dir
=*|
--build=*) ;;
155 -* ) echo "$0: unknown option $arg" ;;
156 CC
=*) CC
=${arg#*=} ;;
157 CFLAGS
=*) CFLAGS
=${arg#*=} ;;
158 CPPFLAGS
=*) CPPFLAGS
=${arg#*=} ;;
159 LDFLAGS
=*) LDFLAGS
=${arg#*=} ;;
165 for i
in SRCDIR PREFIX EXEC_PREFIX BINDIR SHAREDIR DOCDIR MANDIR
; do
170 # Get the source dir for out-of-tree builds
172 if test -z "$SRCDIR" ; then
173 SRCDIR
="${0%/configure}"
176 abs_builddir
="$(pwd)" || fail
"$0: cannot determine working directory"
177 abs_srcdir
="$(cd $SRCDIR && pwd)" || fail
"$0: invalid source directory $SRCDIR"
178 test "$abs_srcdir" = "$abs_builddir" && SRCDIR
=.
179 test "$SRCDIR" != "." -a -f Makefile
-a ! -h Makefile
&& fail
"$0: Makefile already exists in the working directory"
182 # Get a temp filename we can use
186 while : ; do i
=$
(($i+1))
187 tmpc
="./conf$$-$PPID-$i.c"
188 tmpo
="./conf$$-$PPID-$i.o"
189 2>|
/dev
/null
> "$tmpc" && break
190 test "$i" -gt 50 && fail
"$0: cannot create temporary file $tmpc"
193 trap 'rm -f "$tmpc" "$tmpo"' EXIT QUIT TERM HUP
194 trap 'rm -f "$tmpc" "$tmpo" && echo && fail "$0: interrupted"' INT
197 # Find a C compiler to use
199 printf "checking for C compiler... "
204 test -n "$CC" ||
{ echo "$0: cannot find a C compiler" ; exit 1 ; }
206 printf "checking whether C compiler works... "
207 echo "typedef int x;" > "$tmpc"
208 if output
=$
($CC $CPPFLAGS $CFLAGS -c -o "$tmpo" "$tmpc" 2>&1) ; then
211 printf "no; compiler output follows:\n%s\n" "$output"
216 # Figure out options to force errors on unknown flags.
218 tryflag CFLAGS_TRY
-Werror=unknown-warning-option
219 tryflag CFLAGS_TRY
-Werror=unused-command-line-argument
220 tryldflag LDFLAGS_TRY
-Werror=unknown-warning-option
221 tryldflag LDFLAGS_TRY
-Werror=unused-command-line-argument
223 CFLAGS_STD
="-std=c99 -D_POSIX_C_SOURCE=200809L -U_XOPEN_SOURCE -D_XOPEN_SOURCE=700 -DNDEBUG -D_FORTIFY_SOURCE=2"
229 FreeBSD|DragonFly
) CFLAGS_STD
="$CFLAGS_STD -D_BSD_SOURCE -D__BSD_VISIBLE=1" ;;
230 NetBSD
) CFLAGS_STD
="$CFLAGS_STD -D_NETBSD_SOURCE" ;;
231 *BSD
) CFLAGS_STD
="$CFLAGS_STD -D_BSD_SOURCE" ;;
232 Darwin
) CFLAGS_STD
="$CFLAGS_STD -D_DARWIN_C_SOURCE" ;;
233 AIX
) CFLAGS_STD
="$CFLAGS_STD -D_ALL_SOURCE" ;;
238 # Try flags to optimize binary size
240 tryflag CFLAGS
-ffunction-sections
241 tryflag CFLAGS
-fdata-sections
242 tryldflag LDFLAGS_AUTO
-Wl,--gc-sections
244 # Try hardening flags
246 tryflag CFLAGS_AUTO
-fstack-protector-all
247 tryldflag LDFLAGS
-Wl,-z,now
248 tryldflag LDFLAGS
-Wl,-z,relro
249 tryldflag LDFLAGS_AUTO
-pie
251 printf "creating config.mk... "
253 cmdline
=$
(quote
"$0")
254 for i
; do cmdline
="$cmdline $(quote "$i")" ; done
256 exec 3>&1 1>config.mk
259 # This version of config.mk was generated by:
261 # Any changes made here will be lost if configure is re-run
264 EXEC_PREFIX = $EXEC_PREFIX
268 SHAREPREFIX = $SHAREDIR
272 CFLAGS_STD = $CFLAGS_STD
273 LDFLAGS_STD = $LDFLAGS_STD
274 CFLAGS_AUTO = $CFLAGS_AUTO
275 LDFLAGS_AUTO = $LDFLAGS_AUTO
276 CFLAGS_DEBUG = -U_FORTIFY_SOURCE -UNDEBUG -O0 -g3 -ggdb -Wall -Wextra -pedantic -Wno-missing-field-initializers -Wno-unused-parameter
282 if test "$environmentonly" = "yes"; then
287 printf "checking for pkg-config... "
288 cmdexists pkg-config
&& have_pkgconfig
=yes
289 printf "%s\n" "$have_pkgconfig"
291 if test "$help" = "yes" ; then
299 if test "$curses" != "no" ; then
301 printf "checking for libcurses...\n"
306 int main(int argc, char *argv[]) {
313 for libcurses
in ncursesw ncurses curses
; do
314 printf " checking for %s... " "$libcurses"
316 if test "$have_pkgconfig" = "yes" ; then
317 CFLAGS_CURSES
=$
(pkg-config
--cflags $libcurses 2>/dev
/null
)
318 LDFLAGS_CURSES
=$
(pkg-config
--libs $libcurses 2>/dev
/null
)
319 if test $?
-eq 0 && $CC $CFLAGS $CFLAGS_CURSES "$tmpc" \
320 $LDFLAGS $LDFLAGS_CURSES -o "$tmpo" >/dev
/null
2>&1 ; then
328 LDFLAGS_CURSES
="-l$libcurses"
330 if $CC $CFLAGS $CFLAGS_CURSES "$tmpc" \
331 $LDFLAGS $LDFLAGS_CURSES -o "$tmpo" >/dev
/null
2>&1 ; then
342 test "$curses" = "yes" -a $CONFIG_CURSES -ne 1 && fail
"$0: cannot find libcurses"
345 # libtermkey is a mandatory dependency
347 printf "checking for libtermkey... "
351 int main(int argc, char *argv[]) {
352 TERMKEY_CHECK_VERSION;
357 if test "$have_pkgconfig" = "yes" ; then
358 CFLAGS_TERMKEY
=$
(pkg-config
--cflags termkey
2>/dev
/null
)
359 LDFLAGS_TERMKEY
=$
(pkg-config
--libs termkey
2>/dev
/null
)
362 if test -z "$LDFLAGS_TERMKEY"; then
364 LDFLAGS_TERMKEY
="-ltermkey"
367 if $CC $CFLAGS $CFLAGS_TERMKEY "$tmpc" $LDFLAGS $LDFLAGS_TERMKEY $LDFLAGS_CURSES \
368 -o "$tmpo" >/dev
/null
2>&1; then
372 fail
"$0: cannot find libtermkey"
376 REGEX_SRC
=text-regex.c
378 if test "$tre" != "no" ; then
380 printf "checking for libtre... "
387 tre_str_source *source = NULL;
388 regmatch_t pmatch[1];
389 tre_regcomp(&preg, "\0", REG_EXTENDED);
390 tre_reguexec(&preg, source, 1, pmatch, 0);
396 if test "$have_pkgconfig" = "yes" ; then
397 CFLAGS_TRE
=$
(pkg-config
--cflags tre
2>/dev
/null
)
398 LDFLAGS_TRE
=$
(pkg-config
--libs tre
2>/dev
/null
)
401 if test -z "$LDFLAGS_TRE"; then
406 if $CC $CFLAGS $CFLAGS_TRE "$tmpc" \
407 $LDFLAGS $LDFLAGS_TRE -o "$tmpo" >/dev
/null
2>&1; then
409 REGEX_SRC
=text-regex-tre.c
415 test "$tre" = "yes" && fail
"$0: cannot find libtre"
421 # enabling builtin lpeg requires lua support
422 test "$lpeg" = "yes" -a "$lua" = "no" && fail
"$0: need lua support for built-in lpeg"
423 test "$lpeg" = "yes" && lua
=yes
425 if test "$lua" != "no" ; then
427 printf "checking for liblua >= 5.2 ...\n"
434 #if LUA_VERSION_NUM < 502
435 #error "Need at least Lua 5.2"
438 int main(int argc, char *argv[]) {
439 lua_State *L = luaL_newstate();
446 for liblua
in lua lua5.3 lua5.2 lua-5.3 lua-5.2 lua53 lua52
; do
447 printf " checking for %s... " "$liblua"
449 if test "$have_pkgconfig" = "yes" ; then
450 CFLAGS_LUA
=$
(pkg-config
--cflags $liblua 2>/dev
/null
)
451 LDFLAGS_LUA
=$
(pkg-config
--libs $liblua 2>/dev
/null
)
452 if test $?
-eq 0 && $CC $CFLAGS $CFLAGS_LUA "$tmpc" \
453 $LDFLAGS $LDFLAGS_LUA -o "$tmpo" >/dev
/null
2>&1 ; then
461 LDFLAGS_LUA
="-l$liblua -lm -ldl"
463 if $CC $CFLAGS $CFLAGS_LUA "$tmpc" \
464 $LDFLAGS $LDFLAGS_LUA -o "$tmpo" >/dev
/null
2>&1 ; then
475 test "$lua" = "yes" -a $CONFIG_LUA -ne 1 && fail
"$0: cannot find liblua"
477 if test $CONFIG_LUA -eq 1; then
478 CFLAGS_LUA
="$CFLAGS_LUA -DLUA_COMPAT_5_1 -DLUA_COMPAT_5_2 -DLUA_COMPAT_5_3 -DLUA_COMPAT_ALL"
484 if test $CONFIG_LUA -eq 1 -a "$lpeg" != "no" ; then
486 printf "checking for Lua statically linked liblpeg...\n"
493 int main(int argc, char *argv[]) {
494 lua_State *L = luaL_newstate();
496 extern int luaopen_lpeg(lua_State *L);
497 lua_getglobal(L, "package");
498 lua_getfield(L, -1, "preload");
499 lua_pushcfunction(L, luaopen_lpeg);
500 lua_setfield(L, -2, "lpeg");
507 for liblpeg
in lpeg lua5.3
-lpeg lua5.2
-lpeg; do
508 printf " checking for static %s... " "$liblpeg"
510 if test "$have_pkgconfig" = "yes" ; then
511 CFLAGS_LPEG
=$
(pkg-config
--cflags $liblpeg 2>/dev
/null
)
512 LDFLAGS_LPEG
=$
(pkg-config
--libs $liblpeg 2>/dev
/null
)
513 if test $?
-eq 0 && $CC $CFLAGS $CFLAGS_LUA $CFLAGS_LPEG "$tmpc" \
514 $LDFLAGS $LDFLAGS_LUA $LDFLAGS_LPEG -o "$tmpo" >/dev
/null
2>&1 ; then
522 LDFLAGS_LPEG
="-l$liblpeg"
524 if $CC $CFLAGS $CFLAGS_LUA $CFLAGS_LPEG "$tmpc" \
525 $LDFLAGS $LDFLAGS_LUA $LDFLAGS_LPEG -o "$tmpo" >/dev
/null
2>&1 ; then
536 test "$lpeg" = "yes" -a $CONFIG_LPEG -ne 1 && fail
"$0: cannot find liblpeg"
541 if test "$OS" = "Linux" -a "$acl" != "no"; then
542 printf "checking for libacl... "
545 #include <sys/types.h>
548 int main(int argc, char *argv[]) {
549 acl_t acl = acl_get_fd(0);
554 if test "$have_pkgconfig" = "yes" ; then
555 CFLAGS_ACL
=$
(pkg-config
--cflags acl
2>/dev
/null
)
556 LDFLAGS_ACL
=$
(pkg-config
--libs acl
2>/dev
/null
)
559 if test -z "$LDFLAGS_ACL"; then
564 if $CC $CFLAGS $CFLAGS_ACL "$tmpc" \
565 $LDFLAGS $LDFLAGS_ACL -o "$tmpo" >/dev
/null
2>&1; then
572 test "$acl" = "yes" && fail
"$0: cannot find libacl"
578 if test "$OS" = "Linux" -a "$selinux" != "no"; then
579 printf "checking for libselinux... "
582 #include <selinux/selinux.h>
584 int main(int argc, char *argv[]) {
585 return is_selinux_enabled();
589 if test "$have_pkgconfig" = "yes" ; then
590 CFLAGS_SELINUX
=$
(pkg-config
--cflags selinux
2>/dev
/null
)
591 LDFLAGS_SELINUX
=$
(pkg-config
--libs selinux
2>/dev
/null
)
594 if test -z "$LDFLAGS_SELINUX"; then
596 LDFLAGS_SELINUX
="-lselinux"
599 if $CC $CFLAGS $CFLAGS_SELINUX "$tmpc" \
600 $LDFLAGS $LDFLAGS_SELINUX -o "$tmpo" >/dev
/null
2>&1; then
607 test "$selinux" = "yes" && fail
"$0: cannot find libselinux"
611 printf "checking for memrchr... "
617 int main(int argc, char *argv[]) {
618 return !memrchr("\n", '\n', 1);
622 if $CC $CFLAGS $CFLAGS_STD "$tmpc" $LDFLAGS -o "$tmpo" >/dev
/null
2>&1; then
630 printf "completing config.mk... "
632 exec 3>&1 1>>config.mk
635 CONFIG_HELP = $CONFIG_HELP
636 CFLAGS_TERMKEY = $CFLAGS_TERMKEY
637 LDFLAGS_TERMKEY = $LDFLAGS_TERMKEY
638 CONFIG_CURSES = $CONFIG_CURSES
639 CFLAGS_CURSES = $CFLAGS_CURSES
640 LDFLAGS_CURSES = $LDFLAGS_CURSES
641 REGEX_SRC = $REGEX_SRC
642 CONFIG_TRE = $CONFIG_TRE
643 CFLAGS_TRE = $CFLAGS_TRE
644 LDFLAGS_TRE = $LDFLAGS_TRE
645 CONFIG_LUA = $CONFIG_LUA
646 CFLAGS_LUA = $CFLAGS_LUA
647 LDFLAGS_LUA = $LDFLAGS_LUA
648 CONFIG_LPEG = $CONFIG_LPEG
649 CFLAGS_LPEG = $CFLAGS_LPEG
650 LDFLAGS_LPEG = $LDFLAGS_LPEG
651 CONFIG_ACL = $CONFIG_ACL
652 CFLAGS_ACL = $CFLAGS_ACL
653 LDFLAGS_ACL = $LDFLAGS_ACL
654 CONFIG_SELINUX = $CONFIG_SELINUX
655 CFLAGS_SELINUX = $CFLAGS_SELINUX
656 LDFLAGS_SELINUX = $LDFLAGS_SELINUX
657 CFLAGS_LIBC = -DHAVE_MEMRCHR=$HAVE_MEMRCHR
661 test "$SRCDIR" = "." ||
ln -sf $SRCDIR/Makefile .