3 dnl $Id: configure.in,v 1.65 2020/05/25 01:11:40 sjg Exp $
5 dnl Process this file with autoconf to produce a configure script
8 AC_INIT([bmake], [20200524], [sjg@NetBSD.org])
9 AC_CONFIG_HEADERS(config.h)
11 dnl make srcdir absolute
14 *) srcdir=`cd $srcdir && pwd`;;
23 [ --with-defshell=SHELL use SHELL by default - must be sh compatible, use sh or ksh to pick the internal definitions],
25 yes) AC_MSG_ERROR(bad value ${withval} given for bmake DEFSHELL) ;;
27 *) case "$with_defshell" in
28 sh) DEFSHELL_INDEX=DEFSHELL_INDEX_SH;; # it's the default anyway
29 ksh) DEFSHELL_INDEX=DEFSHELL_INDEX_KSH;;
30 csh) DEFSHELL_INDEX=DEFSHELL_INDEX_CSH;; # kidding right?
31 *) defshell_path=$with_defshell;; # better be sh compatible!
37 CYGWIN*|MINGW*) use_makefile=no;;
41 [ --without-makefile dissable use of generated makefile],
43 yes|no) use_makefile=${withval};;
44 *) AC_MSG_ERROR(bad value ${withval} given for makefile) ;;
49 [ --without-meta dissable use of meta-mode],
51 yes|no) use_meta=${withval};;
52 *) AC_MSG_ERROR(bad value ${withval} given for meta) ;;
56 [ --with-filemon={no,dev,ktrace,path/filemon.h} indicate filemon method for meta-mode. Path to filemon.h implies dev],
57 [ case "/${withval}" in
59 /*trace) filemon_h=no use_filemon="${withval}";;
60 */filemon.h) filemon_h="${withval}";;
61 */filemon*) filemon_h="${withval}/filemon.h";;
62 *) AC_MSG_ERROR(bad value ${withval} given for filemon) ;;
64 case "$use_filemon,$filemon_h" in
65 ,*.h) use_filemon=dev;;
70 NetBSD) filemon_h=no use_filemon=ktrace;;
72 for d in "/usr/include/dev/filemon" "$prefix/include/dev/filemon" "$srcdir/../../sys/dev/filemon"
76 filemon_h="$d$x/filemon.h"
77 test -s "$filemon_h" && break
79 test -s "$filemon_h" && { use_filemon=dev; break; }
83 use_filemon=${use_filemon:-no}
84 case "$use_filemon" in
89 dnl echo "Note: use_meta=$use_meta use_filemon=$use_filemon filemon_h=$filemon_h" >&6
92 case "$use_filemon" in
94 *) echo "Using: filemon_${use_filemon}.c" >&6;;
99 dnl Check for OS problems
100 dnl Solaris's signal.h only privides sigset_t etc if one of
101 dnl _EXTENSIONS_ _POSIX_C_SOURCE or _XOPEN_SOURCE are defined.
102 dnl The later two seem to cause more problems than they solve so if we
103 dnl see _EXTENSIONS_ we use it.
104 AC_USE_SYSTEM_EXTENSIONS
105 dnl Checks for programs.
108 dnl AC_PROG_GCC_TRADITIONAL
110 dnl Executable suffix - normally empty; .exe on os2.
111 AC_SUBST(ac_exe_suffix)dnl
113 dnl Hurd refuses to define PATH_MAX or MAXPATHLEN
114 if test -x /usr/bin/getconf; then
115 bmake_path_max=`getconf PATH_MAX / 2> /dev/null`
116 # only a numeric response is useful
117 test ${bmake_path_max:-0} -gt 0 2> /dev/null || bmake_path_max=
119 bmake_path_max=${bmake_path_max:-1024}
120 if test $bmake_path_max -gt 1024; then
121 # this is all we expect
124 echo "Using: BMAKE_PATH_MAX=$bmake_path_max" >&6
125 AC_SUBST(bmake_path_max)dnl
130 dnl Checks for header files.
134 dnl Keep this list sorted
135 AC_CHECK_HEADERS(sys/param.h)
136 dnl On BSDi at least we really need sys/param.h for sys/sysctl.h
137 AC_CHECK_HEADERS([sys/sysctl.h], [], [],
138 [#ifdef HAVE_SYS_PARAM_H
139 # include <sys/param.h>
162 dnl Both *BSD and Linux have sys/cdefs.h, most do not.
163 dnl If it is missing, we add -I${srcdir}/missing to CFLAGS
164 dnl also if sys/cdefs.h does not have __RCSID we need to use ours
165 dnl but we need to include the host's one too *sigh*
166 AC_CHECK_HEADER(sys/cdefs.h,
167 echo $ECHO_N "checking whether sys/cdefs.h is compatible... $ECHO_C" >&6
169 [#include <sys/cdefs.h>
175 echo no >&6; CPPFLAGS="${CPPFLAGS} -I`cd ${srcdir}/missing && pwd` -DNEED_HOST_CDEFS_H"),
176 CPPFLAGS="${CPPFLAGS} -I`cd ${srcdir}/missing && pwd`")
178 dnl Checks for typedefs, structures, and compiler characteristics.
191 dnl Checks for library functions.
196 dnl Keep this list sorted
229 dnl functions which we may need to provide
237 AC_CHECK_LIB([util], [emalloc],
238 [ AC_CHECK_LIB([util], [erealloc],
239 [ AC_CHECK_LIB([util], [estrdup],
240 [ AC_CHECK_LIB([util], [estrndup],
241 [ LIBS="$LIBS -lutil"
242 CPPFLAGS="$CPPFLAGS -DUSE_EMALLOC" ])])])])
250 echo "checking if compiler supports __func__" >&6
252 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[[const char *func = __func__;]])],,
253 AC_DEFINE(__func__, __FUNCTION__, C99 function name))
255 dnl we want this for unit-tests/Makefile
256 echo $ECHO_N "checking if diff -u works... $ECHO_C" >&6
257 if diff -u /dev/null /dev/null > /dev/null 2>&1; then
265 dnl AC_* don't quite cut it.
267 echo "checking for MACHINE & MACHINE_ARCH..." >&6
268 cat > conftest.$ac_ext <<EOF
269 #include "confdefs.h"
270 #include <sys/param.h>
275 machine_arch=MACHINE_ARCH
279 default_machine=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 |
280 egrep machine= | tr -d ' "'`
282 if test "$default_machine"; then
283 eval "$default_machine"
285 machine=${machine:-`$srcdir/machine.sh`}
286 machine_arch=${machine_arch:-`$srcdir/machine.sh arch`}
287 echo "defaults: MACHINE=$machine, MACHINE_ARCH=$machine_arch" 1>&6
289 dnl now allow overrides
292 [ --with-machine=MACHINE explicitly set MACHINE],
293 [case "${withval}" in
294 yes) AC_MSG_ERROR(bad value ${withval} given for bmake MACHINE) ;;
296 generic) machine=`$srcdir/machine.sh`;;
297 *) machine=$with_machine;;
300 AC_ARG_WITH(force_machine,
301 [ --with-force-machine=MACHINE set FORCE_MACHINE],
302 [case "${withval}" in
303 yes) force_machine=FORCE_;;
305 *) force_machine=FORCE_; machine=$with_force_machine;;
309 AC_ARG_WITH(force_machine_arch,
310 [ --with-force-machine-arch=MACHINE set FORCE_MACHINE_ARCH],
311 [case "${withval}" in
312 yes) force_machine_arch=FORCE_;;
314 *) force_machine_arch=FORCE_; machine_arch=$with_force_machine;;
317 AC_ARG_WITH(machine_arch,
318 [ --with-machine_arch=MACHINE_ARCH explicitly set MACHINE_ARCH],
319 [case "${withval}" in
320 yes) AC_MSG_ERROR(bad value ${withval} given for bmake MACHINE_ARCH) ;;
322 *) machine_arch=$with_machine_arch;;
325 dnl Tell them what we ended up with
327 echo "Using: ${force_machine}MACHINE=$machine, MACHINE_ARCH=$machine_arch" 1>&6
329 dnl Allow folk to control _PATH_DEFSYSPATH
331 default_sys_path=\${prefix}/share/mk
332 AC_ARG_WITH(default-sys-path,
333 [ --with-default-sys-path=PATH:DIR:LIST use an explicit _PATH_DEFSYSPATH
334 MAKESYSPATH is a ':' separated list of directories
335 that bmake will search for system .mk files.
336 _PATH_DEFSYSPATH is its default value.],
337 [case "${withval}" in
338 yes) AC_MSG_ERROR(bad value ${withval} given for bmake _PATH_DEFSYSPATH) ;;
340 *) default_sys_path="$with_default_sys_path"
344 dnl Some folk don't like this one
346 AC_ARG_WITH(path-objdirprefix,
347 [ --with-path-objdirprefix=PATH override _PATH_OBJDIRPREFIX],
348 [case "${withval}" in
349 yes) AC_MSG_ERROR(bad value ${withval} given for bmake _PATH_OBJDIRPREFIX) ;;
350 no) CPPFLAGS="$CPPFLAGS -DNO_PATH_OBJDIRPREFIX" ;;
351 *) CPPFLAGS="$CPPFLAGS \"-D_PATH_OBJDIRPREFIX=\\\"$with_path-objdir\\\"\"" ;;
354 dnl And this can be handy to do with out.
356 AC_ARG_ENABLE(pwd-override,
357 [ --disable-pwd-override disable \$PWD overriding getcwd()],
358 [case "${enableval}" in
360 no) CPPFLAGS="$CPPFLAGS -DNO_PWD_OVERRIDE" ;;
361 *) AC_MSG_ERROR(bad value ${enableval} given for pwd-override option) ;;
366 AC_ARG_ENABLE(check-make-chdir,
367 [ --disable-check-make-chdir disable make trying to guess
368 when it should automatically cd \${.CURDIR}],
369 [case "${enableval}" in
371 no) CPPFLAGS="$CPPFLAGS -DNO_CHECK_MAKE_CHDIR" ;;
372 *) AC_MSG_ERROR(bad value ${enableval} given for check-make-chdir option) ;;
375 dnl On non-BSD systems, bootstrap won't work without mk
378 [ --with-mksrc=PATH tell makefile.boot where to find mk src],
379 [case "${withval}" in
381 *) test -s $withval/install-mk && mksrc=$withval ||
382 AC_MSG_ERROR(bad value ${withval} given for mksrc cannot find install-mk)
387 dnl Now make sure we have a value
389 srcdir=`cd $srcdir && pwd`
390 for mksrc in $mksrc $srcdir/mk $srcdir/../mk mk
392 test -s $mksrc/install-mk || continue
393 mksrc=`cd $mksrc && pwd`
396 mksrc=`echo $mksrc | sed "s,$srcdir,\\\${srcdir},"`
397 echo "Using: MKSRC=$mksrc" 1>&6
398 dnl On some systems we want a different default shell by default
399 if test -x /usr/xpg4/bin/sh; then
400 defshell_path=${defshell_path:-/usr/xpg4/bin/sh}
402 if test -n "$defshell_path"; then
403 echo "Using: SHELL=$defshell_path" >&6
404 AC_DEFINE_UNQUOTED(DEFSHELL_CUSTOM, "$defshell_path", Path of default shell)
406 if test -n "$DEFSHELL_INDEX"; then
407 AC_DEFINE_UNQUOTED(DEFSHELL_INDEX, $DEFSHELL_INDEX, Shell spec to use by default)
411 AC_SUBST(force_machine)
412 AC_SUBST(machine_arch)
414 AC_SUBST(default_sys_path)
419 AC_SUBST(use_filemon)
421 AC_SUBST(_MAKE_VERSION)
422 bm_outfiles="Makefile.config unit-tests/Makefile.config make-bootstrap.sh"
423 if test $use_makefile = yes; then
424 bm_outfiles="makefile $bm_outfiles"
426 AC_OUTPUT($bm_outfiles)
431 sh ./make-bootstrap.sh
433 to produce a fully functional bmake.