Rename top(1) to mtop(1), import NetBSD top(1)
[minix3.git] / external / bsd / top / dist / configure.ac
blobc7fc28fafcce7e580e3f4804cb164fe3aaef5db7
1 # configure.ac
2 AC_INIT(top, 3.8beta1)
4 # AX_CHECK_VARIADIC_MACROS...
5 # -----
6 AC_DEFUN([AX_CHECK_VARIADIC_MACROS],
7 [AC_MSG_CHECKING([for variadic macros])
8 AC_COMPILE_IFELSE(AC_LANG_PROGRAM(
9 [#define a(x, ...) (x, __VA_ARGS__)], []),
10          [AS_VAR_SET(ax_cv_c99_variadic, yes)],
11          [AS_VAR_SET(ax_cv_c99_variadic, no)])
12 AC_COMPILE_IFELSE(AC_LANG_PROGRAM(
13 [#define a(x...) (x)], []),
14          [AS_VAR_SET(ax_cv_gnu_variadic, yes)],
15          [AS_VAR_SET(ax_cv_gnu_variadic, no)])
16 _result=""
17 if test "$ax_cv_c99_variadic" = "yes"; then
18     _result=" c99"
19     AC_DEFINE(HAVE_C99_VARIADIC_MACROS, 1, [Supports C99 style variadic macros])
21 if test "$ax_cv_gnu_variadic" = "yes"; then
22     _result="$_result gnu"
23     AC_DEFINE(HAVE_GNU_VARIADIC_MACROS, 1, [Supports gnu style variadic macros])
25 if test "x$_result" = x; then
26     _result="no"
28 AC_MSG_RESULT($_result)
31 # AC_CHECK_CFLAG...
32 # -----
33 AC_DEFUN([AC_CHECK_CFLAG],
34 [AC_MSG_CHECKING([whether compiler accepts $1])
35 AS_VAR_PUSHDEF([ac_Flag], [ac_cv_cflag_$1])dnl
36 _savedcflags=$CFLAGS
37 _savedwerror_flag=$ac_c_werror_flag
38 ac_c_werror_flag=yes
39 CFLAGS=$CFLAGS" $1"
40 AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [AS_VAR_SET(ac_Flag, yes)],
41                                           [AS_VAR_SET(ac_Flag, no)])
42 AC_MSG_RESULT([AS_VAR_GET(ac_Flag)])
43 CFLAGS=$_savedcflags
44 ac_c_werror_flag=$_savedwerror_flag
45 AS_IF([test AS_VAR_GET(ac_Flag) = yes], [$2], [$3])[]dnl
46 AS_VAR_POPDEF([ac_Flag])dnl
47 ])# AC_CHECK_CFLAG
49 echo "Configuring $PACKAGE_STRING"
51 AC_CONFIG_HEADER([config.h])
52 AC_CANONICAL_BUILD
53 AC_CANONICAL_HOST
54 AC_CANONICAL_TARGET
56 # options processing
57 AC_ARG_WITH(module, AC_HELP_STRING([--with-module=NAME],
58                     [use the platform module NAME]),
59                     [if test ! -f machine/m_$withval.c;
60                      then AC_MSG_ERROR([No such module $withval]); fi])
62 AC_ARG_WITH(ext, AC_HELP_STRING([--with-ext=EXT],
63     [use the extension EXT]),
64     [if test -f ext/$withval.c; then
65         AC_DEFINE(WITH_EXT, 1, [Include code that utilizes extensions])
66         SRC="$SRC ext/$withval.c"
67         OBJ="$OBJ $withval.o"
68      else
69         AC_MSG_ERROR([No such extension $withval])
70      fi])
72 DEFAULT_TOPN=30
73 AC_ARG_WITH(default-topn, AC_HELP_STRING([--with-default-topn=N],
74     [use N as the default for number of processes]),
75     [if test x"$with_default_topn" = xall; then
76         DEFAULT_TOPN="-1"
77      elif test x`echo $with_default_topn | tr -d '[0-9+-]'` = x; then
78         DEFAULT_TOPN=$with_default_topn
79      fi])
80 AC_DEFINE_UNQUOTED(DEFAULT_TOPN, $DEFAULT_TOPN, [Default number of processes to display])
81 AC_SUBST(DEFAULT_TOPN)
83 NOMINAL_TOPN=40
84 AC_ARG_WITH(nominal-topn, AC_HELP_STRING([--with-nominal-topn=N],
85     [use N as the default number of processes for non-terminals]),
86     [if test x"$with_nominal_topn" = xall; then
87         NOMINAL_TOPN="-1"
88      elif test x`echo $with_nominal_topn | tr -d '[0-9+-]'` = x; then
89         NOMINAL_TOPN=$with_nominal_topn
90      fi])
91 AC_DEFINE_UNQUOTED(NOMINAL_TOPN, $NOMINAL_TOPN, [Default number of processes to display on non-terminals when topn is all])
92 AC_SUBST(NOMINAL_TOPN)
94 DEFAULT_DELAY=5
95 AC_ARG_WITH(default-delay, AC_HELP_STRING([--with-default-delay=SEC],
96     [use a default delay of SEC seconds]),
97     [if test x`echo $with_default_delay | tr -d '[0-9+-]'` = x; then
98         DEFAULT_DELAY=$with_default_delay
99      fi])
100 AC_DEFINE_UNQUOTED(DEFAULT_DELAY, $DEFAULT_DELAY, [Default delay])
101 AC_SUBST(DEFAULT_DELAY)
103 AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug],
104     [enable support for debugging output]))
105 if test "x$enable_debug" = xyes; then
106     AC_DEFINE(DEBUG, 1, [Support for debugging output])
109 ENABLE_KILL=0
110 AC_ARG_ENABLE(kill, AC_HELP_STRING([--disable-kill],
111     [disable kill and renice commands]))
112 if test x$enable_kill != xno; then
113     AC_DEFINE(ENABLE_KILL, 1, [Enable kill and renice])
114     ENABLE_KILL=1
116 AC_SUBST(ENABLE_KILL)
119 AC_ARG_ENABLE(color, AC_HELP_STRING([--disable-color],
120     [disable the use of color]))
121 AC_ARG_ENABLE(colour, AC_HELP_STRING([--disable-colour],
122     [synonym for --disable-color]))
123 if test x$enable_color != xno -a x$enable_colour != xno; then
124     AC_DEFINE(ENABLE_COLOR, 1, [Enable color])
127 AC_ARG_ENABLE(dualarch, AC_HELP_STRING([--enable-dualarch],
128     [enable or disable a dual architecture (32-bit and 64-bit) compile]))
130 # check for needed programs
131 AC_CHECK_PROGS(MAKE, make)
132 AC_PROG_CC
133 if test "$ac_cv_c_compiler_gnu" = "yes"; then
134     ax_cv_c_compiler_vendor="gnu"
135 else
136     AX_COMPILER_VENDOR
138 AC_PROG_AWK
139 AC_PROG_INSTALL
140 AC_PATH_PROGS(ISAINFO, isainfo)
141 AC_PATH_PROGS(ISAEXEC, isaexec, , [$PATH:/usr/lib:/lib])
142 AC_PATH_PROGS(UNAME, uname)
143 AC_SUBST(ISAEXEC)
145 # system checks require uname
146 if test "$UNAME"; then
147     # we make the version number available as a C preprocessor definition
148     AC_MSG_CHECKING(OS revision number)
149     osrev=`$UNAME -r | tr -cd ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`
151     if test "$osrev" != "unknown" ; then
152         AC_DEFINE_UNQUOTED(OSREV, $osrev, [Define the OS revision.])
153         osmajor=`$UNAME -r | sed 's/^\([[0-9]]*\).*$/\1/'`
154         if test -n "$osmajor"; then
155             AC_DEFINE_UNQUOTED(OSMAJOR, $osmajor, [Define the major OS revision number.])
156         fi
157     else
158         AC_DEFINE(OSREV, "")
159     fi
160     AC_MSG_RESULT($osrev)
162     # we make the non-canonicalized hardware type available
163     AC_MSG_CHECKING(hardware platform)
164     UNAME_HARDWARE=`$UNAME -m`
165     if test "$UNAME_HARDWARE" != "unknown"; then
166         AC_DEFINE_UNQUOTED(UNAME_HARDWARE, "$UNAME_HARDWARE", [Define the system hardware platform])
167     fi
168     AC_MSG_RESULT($UNAME_HARDWARE)
171 # checks for libraries
172 AC_CHECK_LIB(elf, elf32_getphdr)
173 AC_CHECK_LIB(kstat, kstat_open)
174 AC_CHECK_LIB(kvm, kvm_open)
175 # -lmld -lmach
176 AC_CHECK_LIB(mach, vm_statistics)
177 AC_SEARCH_LIBS(tgetent, termcap curses ncurses)
178 AC_CHECK_LIB(m, exp)
180 # check for libraries required by extension
181 extlibs=""
182 if test -n "$with_ext" -a -f "${srcdir}/ext/$with_ext.libs"; then
183     AC_MSG_CHECKING(for libraries needed by extensions)
184     for lib in `cat "${srcdir}/ext/$with_ext.libs"`
185     do
186         saveLIBS=$LIBS
187         LIBS="$LIBS -l$lib"
188         AC_TRY_LINK(, [exit(0);], [extlibs="$extlibs -l$lib"], )
189         LIBS=$saveLIBS
190     done
191     AC_MSG_RESULT($extlibs)
192     LIBS="$LIBS$extlibs"
195 # checks for header files
196 AC_HEADER_STDC
197 AC_CHECK_HEADERS([curses.h getopt.h limits.h math.h stdarg.h sysexits.h termcap.h unistd.h sys/resource.h sys/time.h sys/utsname.h])
198 AC_CHECK_HEADERS([term.h],,,
199 [#if HAVE_CURSES_H
200 #include <curses.h>
201 #endif
203 AC_HEADER_TIME
204 AC_MSG_CHECKING(for a good signal.h)
205 SIGNAL_H="no"
206 for f in /usr/include/signal.h /usr/include/sys/signal.h /usr/include/sys/iso/signal_iso.h /usr/include/bits/signum.h; do
207     if grep SIGKILL $f >/dev/null 2>&1; then
208        SIGNAL_H=$f
209        break
210     fi
211 done
212 AC_MSG_RESULT($SIGNAL_H)
213 if test "$SIGNAL_H" = "no"; then
214     SIGNAL_H="/dev/null"
216 AC_SUBST(SIGNAL_H)
218 # checks for typedefs, structures, and compiler characteristics.
219 AX_CHECK_VARIADIC_MACROS
220 AC_CHECK_DECLS([sys_errlist])
221 AC_CHECK_DECLS([sys_signame],,,
222 [#include <signal.h>
223 /* NetBSD declares sys_siglist in unistd.h.  */
224 #if HAVE_UNISTD_H
225 # include <unistd.h>
226 #endif
228 AC_CHECK_DECLS([tputs, tgoto, tgetent, tgetflag, tgetnum, tgetstr],,,
229 [#if HAVE_CURSES_H && HAVE_TERM_H
230 #include <curses.h>
231 #include <term.h>
232 #else
233 #if HAVE_TERMCAP_H
234 #include <termcap.h>
235 #else
236 #if HAVE_CURSES_H
237 #include <curses.h>
238 #endif
239 #endif
240 #endif
243 # The third argument to tputs is a putc-like function that takes an 
244 # argument.  On most systems that argument is an int, but on some it
245 # is a char.  Determine which.
246 AC_MSG_CHECKING([argument type of tputs putc function])
247 _savedwerror_flag=$ac_c_werror_flag
248 ac_c_werror_flag=yes
249 AC_COMPILE_IFELSE(
250 [AC_LANG_PROGRAM([#ifdef HAVE_TERMCAP_H
251 #include <termcap.h>
252 #endif
253 #ifdef HAVE_CURSES_H
254 #include <curses.h>
255 #endif
256 #ifdef HAVE_TERM_H
257 #include <term.h>
258 #endif
259 int f(char i) { }],
260 [tputs("a", 1, f);])],
261             [ac_cv_type_tputs_putc="char"],
262             [ac_cv_type_tputs_putc="int"])
263 AC_MSG_RESULT($ac_cv_type_tputs_putc)
264 AC_DEFINE_UNQUOTED(TPUTS_PUTC_ARGTYPE, $ac_cv_type_tputs_putc,
265                         [Define as the type for the argument to the
266 putc function of tputs ('int' or 'char')])
267 ac_c_werror_flag=$_savedwerror_flag
269 # Determine presence of needed types
270 AC_TYPE_SIGNAL
271 AC_CHECK_TYPES([id_t, lwpid_t, pid_t, time_t, uid_t])
273 # Checks for library functions.
274 AC_CHECK_FUNCS([getopt getopt_long gettimeofday memcpy setbuffer setpriority setvbuf strcasecmp strchr strerror snprintf sighold sigrelse sigaction sigprocmask sysconf uname vsnprintf])
276 # this is needed in the man page
277 if test "x$ac_cv_func_getopt_long" = "xyes"; then
278     HAVE_GETOPT_LONG=1
279 else
280     HAVE_GETOPT_LONG=0
282 AC_SUBST(HAVE_GETOPT_LONG)
284 # if we dont have snprintf/vsnprint then we need to compile the alternate
285 if test "x$ac_cv_func_snprintf" != "xyes" -o "x$ac_cv_func_vsnprintf" != "xyes"; then
286     SRC="$SRC ap_snprintf.c"
287     OBJ="$OBJ ap_snprintf.o"
291 # determine correct user, group, and mode
292 # these can be overridden later if need be
293 AC_MSG_CHECKING(for correct ls options)
294 lslong="ls -l"
295 if test `$lslong -d . | wc -w` -lt 9; then
296    lslong="ls -lg"
298 AC_MSG_RESULT($lslong)
301 # determine correct module
302 AC_MSG_CHECKING(for a platform module)
303 if test "$with_module"; then
304     MODULE=$with_module
305 else
306     case $target_os in
307         aix4.2*)        MODULE=aix43;;
308         aix4.3*)        MODULE=aix43;;
309         aix5*)          MODULE=aix5;;
310         dec-osf*)       MODULE=decosf1;;
311         osf1*)          MODULE=decosf1;;
312         osf4*)          MODULE=decosf1;;
313         osf5*)          MODULE=decosf1;;
314         freebsd*)       MODULE=freebsd; USE_KMEM=1; USE_FPH=1;;
315         hpux7*)         MODULE=hpux7;;
316         hpux8*)         MODULE=hpux8;;
317         hpux9*)         MODULE=hpux9;;
318         hpux10*)        MODULE=hpux10;;
319         hpux11*)        MODULE=hpux10;;
320         irix5*)         MODULE=irix5;;
321         irix6*)         MODULE=irixsgi;;
322         linux*)         MODULE=linux; USE_FPH=1; SET_MODE=755;;
323         netbsd*)        MODULE=netbsd; SET_MODE=755;;
324         solaris2*)      MODULE=sunos5; USE_FPH=1; SET_MODE=755;;
325         sunos4*)        MODULE=sunos4;;
326         sysv4*)         MODULE=svr4;;
327         sysv5*)         MODULE=svr5;;
328         darwin*)
329             echo "macosx"
330             echo "The macosx module is untested.  Use at your own risk."
331             echo "If you really want to use this module, please run configure as follows:"
332             echo "    ./configure --with-module=macosx"
333             AC_MSG_ERROR([macosx module unsupported]);;
334         *)  echo "none"
335             echo "Configure doesn't recognize this system and doesn't know"
336             echo "what module to assign to it.  Help the cause and run the"
337             echo "following command to let the maintainers know about this"
338             echo "deficiency!  Thanks.  Just cut and paste the following:"
339 echo "uname -a | mail -s $target_os bill@lefebvre.org"
340             echo ""
341             AC_MSG_ERROR([System type $target_os unrecognized])
342     esac
344 AC_MSG_RESULT($MODULE)
345 SRC="$SRC machine/m_$MODULE.c"
346 OBJ="$OBJ m_$MODULE.o"
347 CLEAN_EXTRA=""
348 AC_SUBST(SRC)
349 AC_SUBST(OBJ)
350 AC_SUBST(CLEAN_EXTRA)
351 AC_DEFINE_UNQUOTED(MODULE, "$MODULE", [Platform module])
353 FIRST_RULE=/dev/null
354 INSTALL_RULE=config.default.makeinstall
356 # extra things that need to be done for certain systems
357 # also handle setup for 64-bit detection
358 bits="default"
359 case $MODULE in
360     aix5)
361         AC_CHECK_LIB(perfstat, perfstat_cpu_total)
362         if test -f /usr/sbin/bootinfo; then
363             bits="`/usr/sbin/bootinfo -K`"
364             extra_flag="-q64"
365         fi
366     ;;
367     svr5)
368         # -lmas
369         AC_CHECK_LIB(mas, mas_open)
370     ;;
371     sunos5)
372         if test "$ISAINFO"; then
373             bits="`$ISAINFO -b`"
374             if test "$target_cpu" = "sparc"; then
375                 extra_flag="-xarch=v9"
376             else
377                 extra_flag="-xarch=amd64"
378             fi
379         fi
380     ;;
381 esac
383 # USE_FPH means the module has format_process_header
384 if test -n "$USE_FPH"; then
385     AC_DEFINE(HAVE_FORMAT_PROCESS_HEADER, 1, [Platform module])
388 # if we are 64-bit, try to turn on the appropriate flags
389 AC_MSG_CHECKING(address space size)
390 ARCHFLAG=""
391 if test "$bits" = "64"; then
392     AC_MSG_RESULT(64)
393     if test "$ax_cv_c_compiler_vendor" = "gnu"; then
394         extra_flag="-m64"
395     fi
396 #   Make sure our compiler accepts the flag we want to use
397     AC_CHECK_CFLAG($extra_flag, [ARCHFLAG="$extra_flag"],
398                                 [enable_dualarch="no"])
399 else
400     AC_MSG_RESULT($bits)
402 AC_SUBST(ARCHFLAG)
404 # Dual architecture handling:  for now this is only enabled on Solaris.
405 # Config options can explicitly enable or disable dualarch.  Otherwise,
406 # dualarch is only enabled when we are on a 64-bit system.
407 if test "$MODULE" = "sunos5"; then
408     AC_MSG_CHECKING(for dual architecture compilation)
409     if test "x$enable_dualarch" = x; then
410 #       we must make the determination implicitly
411         if test "$bits" = "64"; then
412             enable_dualarch="yes"
413         else
414             enable_dualarch="no"
415         fi
416     fi
417     if test "x$enable_dualarch" = "xyes"; then
418         AC_MSG_RESULT(yes)
419         if test "$target_cpu" = "sparc"; then
420             FIRST_RULE="config.sparcv9.make"
421             INSTALL_RULE="config.sparcv9.makeinstall"
422             CLEAN_EXTRA="$CLEAN_EXTRA sparcv7/* sparcv9/*"
423             mkdir -p sparcv7 sparcv9
424         else
425             FIRST_RULE="config.amd64.make"
426             INSTALL_RULE="config.amd64.makeinstall"
427             CLEAN_EXTRA="$CLEAN_EXTRA i386/* amd64/*"
428             mkdir -p i386 amd64
429         fi
430     else
431         AC_MSG_RESULT(no)
432     fi
435 if test x$enable_dualarch = xyes; then
436     AC_DEFINE(ENABLE_DUALARCH, 1, [Enable dual architecture])
439 AC_SUBST_FILE(FIRST_RULE)
440 AC_SUBST_FILE(INSTALL_RULE)
442 AC_MSG_CHECKING(for installation settings)
443 # calculate appropriate settings
444 OWNER=""
445 GROUP=""
446 MODE=""
447 if test ! -n "$USE_KMEM" -a -d /proc; then
448 #   make sure we are installed so that we can read /proc
449     rm -f conftest.txt
450     if test -r /proc/0/psinfo; then
451 #       system uses solaris-style /proc
452         $lslong /proc/0/psinfo >conftest.txt
453     elif test -r /proc/1/stat; then
454 #       linux-style /proc?
455         $lslong /proc/1/stat >conftest.txt
456     else
457         echo "-r--r--r-- 1 bin bin 32 Jan 1 12:00 /foo" >conftest.txt
458     fi
460 #   set permissions so that we can read stuff in /proc
461     if grep '^.......r..' conftest.txt >/dev/null; then
462 #       world readable
463         MODE=755
464     elif grep '^....r.....' conftest.txt >/dev/null; then
465 #       group readable
466         MODE=2711
467         GROUP=`awk ' { print $4 }'`
468     else
469 #       probably only readable by root
470         MODE=4711
471         OWNER=`awk ' { print $3 }'`
472     fi
474 elif test -c /dev/kmem; then
475     $lslong -L /dev/kmem >conftest.txt
476     if grep '^....r..r..' conftest.txt >/dev/null; then
477         MODE=755
478     elif grep '^....r..-..' conftest.txt >/dev/null; then
479         MODE=2755
480         GROUP=`$AWK ' { print $4 }' conftest.txt`
481     fi
482 else
483     MODE=755
485 rm -f conftest.txt
486 # let module settings override what we calculated
487 OWNER=${SET_OWNER:-$OWNER}
488 GROUP=${SET_GROUP:-$GROUP}
489 MODE=${SET_MODE:-$MODE}
491 # set only those things that require it
492 result=""
493 INSTALL_OPTS_PROG=""
494 if test x$OWNER != x; then
495     result="${result}owner=$OWNER, "
496     INSTALL_OPTS_PROG="$INSTALL_OPTS_PROG -o $OWNER"
498 if test x$GROUP != x; then
499     result="${result}group=$GROUP, "
500     INSTALL_OPTS_PROG="$INSTALL_OPTS_PROG -g $GROUP"
502 result="${result}mode=$MODE"
503 INSTALL_OPTS_PROG="$INSTALL_OPTS_PROG -m $MODE"
505 AC_MSG_RESULT($result)
507 # add extra cflags if the compiler accepts them
508 AX_CFLAGS_WARN_ALL
509 MODULE_CFLAGS=""
510 if test "$ax_cv_c_compiler_vendor" = "gnu"; then
511     AX_CFLAGS_GCC_OPTION([-fno-strict-aliasing], [MODULE_CFLAGS])
512     if test "$target_cpu" = "alpha"; then
513         AX_CFLAGS_GCC_OPTION([-mfp-trap-mode=sui -mtrap-precision=i])
514     fi
517 # Define man page supplement
518 MAN_SUPPLEMENT=machine/m_$MODULE.man
519 AC_SUBST_FILE(MAN_SUPPLEMENT)
521 # Extra things we want substituted
522 AC_SUBST(MODULE)
523 AC_SUBST(MODULE_CFLAGS)
524 AC_SUBST(INSTALL_OPTS_PROG)
526 # wrapup
528 AC_CONFIG_FILES(Makefile top.1)
529 AC_OUTPUT