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