1236769Sobriendnl
2236769Sobriendnl RCSid:
3321964Ssjgdnl	$Id: configure.in,v 1.57 2016/06/07 00:49:44 sjg Exp $
4236769Sobriendnl
5236769Sobriendnl Process this file with autoconf to produce a configure script
6236769Sobriendnl
7276305SngieAC_PREREQ(2.50)
8321964SsjgAC_INIT([bmake], [20160606], [sjg@NetBSD.org])
9276305SngieAC_CONFIG_HEADERS(config.h)
10236769Sobrien
11246223Ssjgdnl make srcdir absolute
12246223Ssjgcase "$srcdir" in
13246223Ssjg/*) ;;
14246223Ssjg*) srcdir=`cd $srcdir && pwd`;;
15246223Ssjgesac
16246223Ssjg
17236769Sobriendnl
18236769SobrienAC_ARG_WITH(defshell,
19236769Sobrien[  --with-defshell=SHELL  use SHELL by default - must be sh compatible, use sh or ksh to pick the internal definitions],
20236769Sobrien[case "${withval}" in
21236769Sobrienyes)   AC_MSG_ERROR(bad value ${withval} given for bmake DEFSHELL) ;;
22236769Sobrienno)    ;;
23236769Sobrien*)     case "$with_defshell" in
24236769Sobrien       sh)  DEFSHELL_INDEX=DEFSHELL_INDEX_SH;;	# it's the default anyway
25236769Sobrien       ksh) DEFSHELL_INDEX=DEFSHELL_INDEX_KSH;;
26236769Sobrien       csh) DEFSHELL_INDEX=DEFSHELL_INDEX_CSH;;	# kidding right?
27236769Sobrien       *)   defshell_path=$with_defshell;;	# better be sh compatible!
28236769Sobrien       esac
29236769Sobrien       ;;
30236769Sobrien       esac])
31236769Sobriendnl
32236769Sobrienuse_meta=yes
33236769SobrienAC_ARG_WITH(meta,
34236769Sobrien[ --without-meta dissable use of meta-mode],
35236769Sobrien[case "${withval}" in
36236769Sobrienyes|no) use_meta=${withval};;
37236769Sobrien*) AC_MSG_ERROR(bad value ${withval} given for meta) ;;
38236769Sobrienesac])
39236769Sobriendnl
40236769SobrienAC_ARG_WITH(filemon,
41236769Sobrien[ --with-filemon=path/filemon.h indicate path to filemon.h for meta-mode],
42236769Sobrien[ case "/${withval}" in
43236769Sobrien/no|*/filemon.h) filemon_h="${withval}";;
44236769Sobrien*/filemon*) filemon_h="${withval}/filemon.h";;
45236769Sobrien*) AC_MSG_ERROR(bad value ${withval} given for filemon) ;;
46236769Sobrienesac],
47236769Sobrien[
48236769SobrienOS=`uname -s`
49237578Sobrienfor d in "/usr/include/dev/filemon" "$prefix/include/dev/filemon" "$srcdir/filemon" "$srcdir/../filemon" "$srcdir/../../sys/dev/filemon"
50236769Sobriendo
51236769Sobrien	for x in "/$OS" ""
52236769Sobrien	do
53236769Sobrien		filemon_h="$d$x/filemon.h"
54236769Sobrien		test -s "$filemon_h" && break
55236769Sobrien	done
56236769Sobrien	test -s "$filemon_h" && break
57236769Sobriendone
58236769Sobrientest -s "${filemon_h:-/dev/null}" || filemon_h=no
59236769Sobrien])
60236769Sobriendnl echo "Note: use_meta=$use_meta filemon_h=$filemon_h" >&6
61236769Sobriencase "$use_meta" in
62236769Sobrienyes)
63236769Sobrien	case "$filemon_h" in
64236769Sobrien	*.h) echo "Using: filemon=$filemon_h" >&6;;
65236769Sobrien	esac
66236769Sobrien	;;
67236769Sobrienesac
68236769Sobriendnl
69236769Sobriendnl Check for OS problems
70236769Sobriendnl Solaris's signal.h only privides sigset_t etc if one of
71236769Sobriendnl _EXTENSIONS_ _POSIX_C_SOURCE or _XOPEN_SOURCE are defined.
72236769Sobriendnl The later two seem to cause more problems than they solve so if we
73236769Sobriendnl see _EXTENSIONS_ we use it.
74236769SobrienAC_USE_SYSTEM_EXTENSIONS
75236769Sobriendnl Checks for programs.
76236769SobrienAC_PROG_CC
77236769SobrienAC_PROG_GCC_TRADITIONAL
78236769SobrienAC_PROG_INSTALL
79236769Sobriendnl Executable suffix - normally empty; .exe on os2.
80236769SobrienAC_SUBST(ac_exe_suffix)dnl
81236769Sobriendnl
82276305Sngiednl Hurd refuses to define PATH_MAX or MAXPATHLEN
83276305Sngieif test -x /usr/bin/getconf; then
84276305Sngie   bmake_path_max=`getconf PATH_MAX / 2> /dev/null`
85292068Ssjg   # only a numeric response is useful
86292068Ssjg   test ${bmake_path_max:-0} -gt 0 2> /dev/null || bmake_path_max=
87276305Sngiefi
88276305Sngiebmake_path_max=${bmake_path_max:-1024}
89276305Sngieif test $bmake_path_max -gt 1024; then
90276305Sngie   # this is all we expect
91276305Sngie   bmake_path_max=1024
92276305Sngiefi
93276305Sngieecho "Using: BMAKE_PATH_MAX=$bmake_path_max" >&6
94276305SngieAC_SUBST(bmake_path_max)dnl
95276305Sngiednl
96236769Sobriendnl AC_C_CROSS
97236769Sobriendnl
98236769Sobrien
99236769Sobriendnl Checks for header files.
100236769SobrienAC_HEADER_STDC
101236769SobrienAC_HEADER_SYS_WAIT
102236769SobrienAC_HEADER_DIRENT
103236769Sobriendnl Keep this list sorted
104292068SsjgAC_CHECK_HEADERS(sys/param.h)
105292068Ssjgdnl On BSDi at least we really need sys/param.h for sys/sysctl.h
106292068SsjgAC_CHECK_HEADERS([sys/sysctl.h], [], [],
107292068Ssjg[#ifdef HAVE_SYS_PARAM_H
108292068Ssjg# include <sys/param.h>
109292068Ssjg# endif
110292068Ssjg])
111292068Ssjg
112236769SobrienAC_CHECK_HEADERS( \
113236769Sobrien	ar.h \
114236769Sobrien	err.h \
115236769Sobrien	fcntl.h \
116292068Ssjg	libgen.h \
117292068Ssjg	limits.h \
118236769Sobrien	paths.h \
119236769Sobrien	poll.h \
120236769Sobrien	ranlib.h \
121236769Sobrien	string.h \
122236769Sobrien	sys/mman.h \
123236769Sobrien	sys/select.h \
124236769Sobrien	sys/socket.h \
125236769Sobrien	sys/time.h \
126236769Sobrien	sys/uio.h \
127236769Sobrien	unistd.h \
128236769Sobrien	utime.h \
129236769Sobrien	)
130236769Sobrien
131236769Sobriendnl Both *BSD and Linux have sys/cdefs.h, most do not.
132236769Sobriendnl If it is missing, we add -I${srcdir}/missing to CFLAGS
133236769Sobriendnl also if sys/cdefs.h does not have __RCSID we need to use ours
134236769Sobriendnl but we need to include the host's one too *sigh*
135236769SobrienAC_CHECK_HEADER(sys/cdefs.h,
136236769Sobrienecho $ECHO_N "checking whether sys/cdefs.h is compatible... $ECHO_C" >&6
137236769SobrienAC_EGREP_CPP(yes,
138236769Sobrien[#include <sys/cdefs.h>
139236769Sobrien#ifdef __RCSID
140236769Sobrienyes
141236769Sobrien#endif
142236769Sobrien],
143236769Sobrienecho yes  >&6,
144236769Sobrienecho no  >&6; CPPFLAGS="${CPPFLAGS} -I`cd ${srcdir}/missing && pwd` -DNEED_HOST_CDEFS_H"),
145236769SobrienCPPFLAGS="${CPPFLAGS} -I`cd ${srcdir}/missing && pwd`")
146236769Sobrien
147236769Sobriendnl Checks for typedefs, structures, and compiler characteristics.
148236769SobrienAC_C___ATTRIBUTE__
149236769SobrienAC_C_BIGENDIAN
150236769SobrienAC_C_CONST
151321964SsjgAC_TYPE_MODE_T
152236769SobrienAC_TYPE_OFF_T
153236769SobrienAC_TYPE_PID_T
154236769SobrienAC_TYPE_SIZE_T
155292068SsjgAC_TYPE_UINT32_T
156236769SobrienAC_DECL_SYS_SIGLIST
157236769SobrienAC_HEADER_TIME
158236769SobrienAC_STRUCT_TM
159236769Sobrien
160236769Sobriendnl Checks for library functions.
161236769SobrienAC_TYPE_SIGNAL
162236769SobrienAC_FUNC_VFORK
163236769SobrienAC_FUNC_VPRINTF
164236769SobrienAC_FUNC_WAIT3
165236769Sobriendnl Keep this list sorted
166236769SobrienAC_CHECK_FUNCS( \
167236769Sobrien	err \
168236769Sobrien	errx \
169236769Sobrien	getcwd \
170236769Sobrien	getenv \
171236769Sobrien	getopt \
172236769Sobrien	getwd \
173236769Sobrien	killpg \
174236769Sobrien	mmap \
175236769Sobrien	putenv \
176236769Sobrien	select \
177236769Sobrien	setenv \
178236769Sobrien	setpgid \
179236769Sobrien	setsid \
180236769Sobrien	sigaction \
181236769Sobrien	sigvec \
182236769Sobrien	snprintf \
183236769Sobrien	strerror \
184236769Sobrien	strftime \
185236769Sobrien	strsep \
186236769Sobrien	strtod \
187236769Sobrien	strtol \
188276305Sngie	sysctl \
189236769Sobrien	unsetenv \
190236769Sobrien	vsnprintf \
191236769Sobrien	wait3 \
192236769Sobrien	wait4 \
193236769Sobrien	waitpid \
194236769Sobrien	warn \
195236769Sobrien	warnx \
196236769Sobrien	)
197236769Sobrien
198236769Sobriendnl functions which we may need to provide
199236769SobrienAC_REPLACE_FUNCS( \
200236769Sobrien	realpath \
201236769Sobrien	dirname \
202236769Sobrien	stresep \
203236769Sobrien	strlcpy \
204236769Sobrien	)
205236769Sobrien
206236769SobrienAC_CHECK_LIB([util], [emalloc],
207236769Sobrien    [ AC_CHECK_LIB([util], [erealloc],
208236769Sobrien      [ AC_CHECK_LIB([util], [estrdup],
209236769Sobrien        [ AC_CHECK_LIB([util], [estrndup],
210236769Sobrien	  [ LIBS="$LIBS -lutil"
211236769Sobrien	    CPPFLAGS="$CPPFLAGS -DUSE_EMALLOC" ])])])])
212236769Sobrien
213236769Sobriendnl
214236769Sobriendnl Structures
215236769Sobriendnl
216236769SobrienAC_HEADER_STAT
217236769SobrienAC_STRUCT_ST_RDEV
218236769Sobriendnl
219276305Sngieecho "checking if compiler supports __func__" >&6
220276305SngieAC_LANG(C)
221276305SngieAC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[[const char *func = __func__;]])],,
222276305Sngie	AC_DEFINE(__func__, __FUNCTION__, C99 function name))
223276305Sngiednl
224236769Sobriendnl we want this for unit-tests/Makefile
225236769Sobrienecho $ECHO_N "checking if diff -u works... $ECHO_C" >&6
226236769Sobrienif diff -u /dev/null /dev/null > /dev/null 2>&1; then
227236769Sobrien   diff_u=-u
228236769Sobrien   echo yes >&6
229236769Sobrienelse
230236769Sobrien   diff_u=
231236769Sobrien   echo no >&6
232236769Sobrienfi
233236769Sobriendnl
234236769Sobriendnl AC_* don't quite cut it.
235236769Sobriendnl 
236236769Sobrienecho "checking for MACHINE & MACHINE_ARCH..." >&6
237236769Sobriencat > conftest.$ac_ext <<EOF
238236769Sobrien#include "confdefs.h"
239236769Sobrien#include <sys/param.h>
240236769Sobrien#ifdef MACHINE
241236769Sobrienmachine=MACHINE
242236769Sobrien#endif
243236769Sobrien#ifdef MACHINE_ARCH
244236769Sobrienmachine_arch=MACHINE_ARCH
245236769Sobrien#endif
246236769SobrienEOF
247236769Sobrien
248236769Sobriendefault_machine=`(eval "$ac_cpp conftest.$ac_ext") 2>&5 | 
249236769Sobrien	egrep machine= | tr -d ' "'`
250236769Sobrienrm -rf conftest*
251236769Sobrienif test "$default_machine"; then
252236769Sobrien	eval "$default_machine"
253236769Sobrienfi
254236769Sobrienmachine=${machine:-`$srcdir/machine.sh`}
255236769Sobrienmachine_arch=${machine_arch:-`$srcdir/machine.sh arch`}
256236769Sobrienecho "defaults: MACHINE=$machine, MACHINE_ARCH=$machine_arch" 1>&6
257236769Sobriendnl
258236769Sobriendnl now allow overrides
259236769Sobriendnl
260236769SobrienAC_ARG_WITH(machine,
261236769Sobrien[  --with-machine=MACHINE  explicitly set MACHINE],
262236769Sobrien[case "${withval}" in
263236769Sobrienyes)   AC_MSG_ERROR(bad value ${withval} given for bmake MACHINE) ;;
264236769Sobrienno)    ;;
265236769Sobriengeneric) machine=`$srcdir/machine.sh`;;
266236769Sobrien*)     machine=$with_machine;;
267236769Sobrienesac])
268236769Sobrienforce_machine=
269236769SobrienAC_ARG_WITH(force_machine,
270236769Sobrien[  --with-force-machine=MACHINE  set FORCE_MACHINE],
271236769Sobrien[case "${withval}" in
272236769Sobrienyes)   force_machine=FORCE_;;
273236769Sobrienno)    ;;
274236769Sobrien*)     force_machine=FORCE_; machine=$with_force_machine;;
275236769Sobrienesac])
276236769Sobriendnl
277236769Sobrienforce_machine_arch=
278236769SobrienAC_ARG_WITH(force_machine_arch,
279236769Sobrien[  --with-force-machine-arch=MACHINE  set FORCE_MACHINE_ARCH],
280236769Sobrien[case "${withval}" in
281236769Sobrienyes)   force_machine_arch=FORCE_;;
282236769Sobrienno)    ;;
283236769Sobrien*)     force_machine_arch=FORCE_; machine_arch=$with_force_machine;;
284236769Sobrienesac])
285236769Sobriendnl
286236769SobrienAC_ARG_WITH(machine_arch,
287236769Sobrien[  --with-machine_arch=MACHINE_ARCH  explicitly set MACHINE_ARCH],
288236769Sobrien[case "${withval}" in
289236769Sobrienyes)   AC_MSG_ERROR(bad value ${withval} given for bmake MACHINE_ARCH) ;;
290236769Sobrienno)    ;;
291236769Sobrien*)     machine_arch=$with_machine_arch;;
292236769Sobrienesac])
293236769Sobriendnl
294236769Sobriendnl Tell them what we ended up with
295236769Sobriendnl
296236769Sobrienecho "Using: ${force_machine}MACHINE=$machine, MACHINE_ARCH=$machine_arch" 1>&6
297236769Sobriendnl
298236769Sobriendnl Allow folk to control _PATH_DEFSYSPATH
299236769Sobriendnl
300236769Sobriendefault_sys_path=\${prefix}/share/mk
301236769SobrienAC_ARG_WITH(default-sys-path,
302236769Sobrien[  --with-default-sys-path=PATH:DIR:LIST  use an explicit _PATH_DEFSYSPATH
303236769Sobrien	MAKESYSPATH is a ':' separated list of directories 
304236769Sobrien	that bmake will search for system .mk files. 
305236769Sobrien	_PATH_DEFSYSPATH is its default value.],
306236769Sobrien[case "${withval}" in
307236769Sobrienyes)	AC_MSG_ERROR(bad value ${withval} given for bmake _PATH_DEFSYSPATH) ;;
308236769Sobrienno)	;;
309236769Sobrien*)	default_sys_path="$with_default_sys_path"
310236769Sobrien	;;
311236769Sobrienesac])
312236769Sobriendnl
313236769Sobriendnl Some folk don't like this one
314236769Sobriendnl
315236769SobrienAC_ARG_WITH(path-objdirprefix,
316236769Sobrien[  --with-path-objdirprefix=PATH  override _PATH_OBJDIRPREFIX],
317236769Sobrien[case "${withval}" in
318236769Sobrienyes)   AC_MSG_ERROR(bad value ${withval} given for bmake _PATH_OBJDIRPREFIX) ;;
319236769Sobrienno)    CPPFLAGS="$CPPFLAGS -DNO_PATH_OBJDIRPREFIX" ;;
320236769Sobrien*)     CPPFLAGS="$CPPFLAGS \"-D_PATH_OBJDIRPREFIX=\\\"$with_path-objdir\\\"\"" ;;
321236769Sobrienesac])
322236769Sobriendnl
323236769Sobriendnl And this can be handy to do with out.
324236769Sobriendnl
325236769SobrienAC_ARG_ENABLE(pwd-override,
326236769Sobrien[  --disable-pwd-override  disable \$PWD overriding getcwd()],
327236769Sobrien[case "${enableval}" in
328236769Sobrienyes)   ;;
329236769Sobrienno)    CPPFLAGS="$CPPFLAGS -DNO_PWD_OVERRIDE" ;;
330236769Sobrien*)     AC_MSG_ERROR(bad value ${enableval} given for pwd-override option) ;;
331236769Sobrienesac])
332236769Sobriendnl
333236769Sobriendnl Just for grins
334236769Sobriendnl
335236769SobrienAC_ARG_ENABLE(check-make-chdir,
336236769Sobrien[  --disable-check-make-chdir disable make trying to guess 
337236769Sobrien	when it should automatically cd \${.CURDIR}],
338236769Sobrien[case "${enableval}" in
339236769Sobrienyes)   ;;
340236769Sobrienno)    CPPFLAGS="$CPPFLAGS -DNO_CHECK_MAKE_CHDIR" ;;
341236769Sobrien*)     AC_MSG_ERROR(bad value ${enableval} given for check-make-chdir option) ;;
342236769Sobrienesac])
343236769Sobriendnl
344236769Sobriendnl On non-BSD systems, bootstrap won't work without mk
345236769Sobriendnl
346236769SobrienAC_ARG_WITH(mksrc,
347236769Sobrien[  --with-mksrc=PATH tell makefile.boot where to find mk src],
348236769Sobrien[case "${withval}" in
349236769Sobrien""|yes|no) ;;
350236769Sobrien*) test -s $withval/install-mk && mksrc=$withval ||
351236769SobrienAC_MSG_ERROR(bad value ${withval} given for mksrc cannot find install-mk)
352236769Sobrien;;
353236769Sobrienesac
354236769Sobrien])
355236769Sobriendnl
356236769Sobriendnl Now make sure we have a value
357236769Sobriendnl
358236769Sobriensrcdir=`cd $srcdir && pwd`
359236769Sobrienfor mksrc in $mksrc $srcdir/mk $srcdir/../mk mk
360236769Sobriendo
361236769Sobrien	test -s $mksrc/install-mk || continue
362236769Sobrien	mksrc=`cd $mksrc && pwd`
363236769Sobrien	break
364236769Sobriendone
365236769Sobrienmksrc=`echo $mksrc | sed "s,$srcdir,\\\${srcdir},"`
366236769Sobrienecho "Using: MKSRC=$mksrc" 1>&6
367236769Sobriendnl On some systems we want a different default shell by default
368236769Sobrienif test -x /usr/xpg4/bin/sh; then
369236769Sobrien        defshell_path=${defshell_path:-/usr/xpg4/bin/sh}
370236769Sobrienfi
371236769Sobrienif test -n "$defshell_path"; then
372236769Sobrien	echo "Using: SHELL=$defshell_path"  >&6
373236769Sobrien	AC_DEFINE_UNQUOTED(DEFSHELL_CUSTOM, "$defshell_path", Path of default shell)
374236769Sobrienfi
375236769Sobrienif test -n "$DEFSHELL_INDEX"; then
376236769Sobrien       AC_DEFINE_UNQUOTED(DEFSHELL_INDEX, $DEFSHELL_INDEX, Shell spec to use by default)
377236769Sobrienfi        
378236769Sobriendnl
379236769SobrienAC_SUBST(machine)
380236769SobrienAC_SUBST(force_machine)
381236769SobrienAC_SUBST(machine_arch)
382236769SobrienAC_SUBST(mksrc)
383236769SobrienAC_SUBST(default_sys_path)
384236769SobrienAC_SUBST(INSTALL)
385236769SobrienAC_SUBST(GCC)
386236769SobrienAC_SUBST(diff_u)
387236769SobrienAC_SUBST(use_meta)
388236769SobrienAC_SUBST(filemon_h)
389246223SsjgAC_OUTPUT(makefile Makefile.config make-bootstrap.sh unit-tests/Makefile)
390236769Sobrien
391236769Sobriencat <<EOF
392236769Sobrien
393236769SobrienYou can now run
394236769Sobrien
395236769Sobrien	sh ./make-bootstrap.sh
396236769Sobrien
397236769Sobriento produce a fully functional bmake.
398236769Sobrien
399236769SobrienEOF
400