#!/bin/sh # Configure script for util-linux - aeb, 990205 # # We need to find out the following things: # # Existence of header files: # H1. For fdisksunlabel.c: is there a ? # H2. For fdisk.c: is there a ? # H3. For kbd_rate.c: does exist? # H4. For nls.h: do we have ? # H5. For cal.c: do we have ? # H6. For mkswap.c: do we have ? # H7. For nfsmount.h (nfsmount_xdr.c: int32_t): do we have ? # # Existence of functions: # F1. For nfsmount.c: is inet_aton() available? # F2. For mkswap.c: is fsync() available? # F3. For agetty.c: is getdomainname() available? # F4. For hwclock/kd.c: do we have nanosleep()? # F5. For mkswap.c: do we have personality()? # # 1. For sys-utils/cytune.c: do we need ? # 2. For cfdisk, setterm, more, ul: do we have ncurses? How installed? # 3. For more: do we have libtermcap? # 4. For chfn, chsh, login, newgrp, passwd: do we need -lcrypt? # 5. For sln: does static compilation work? # 6. For lib/nls.h: do we have and gettext()? # 7. For xgettext: does it take the option --foreign-user? # 8. For err.c: do we have __progname? # 9. For script.c: do we have and openpty()? # 10. For lib/widechar.h: do we have wide character support? # 11. For pivot_root.c: does define __NR_pivot_root? # 12. For hwclock.c: does struct tm have a field tm_gmtoff? # 13. For nfsmount: does the output of rpcgen compile? rm -f make_include defines.h VERSION=`cat VERSION` echo echo configuring util-linux-$VERSION echo echo "VERSION=$VERSION" > make_include echo '#define UTIL_LINUX_VERSION "'$VERSION'"' > defines.h echo '#define util_linux_version "util-linux-'$VERSION'"' >> defines.h echo >> defines.h CC=${CC-cc} CFLAGS=${CFLAGS-"-O"} LDFLAGS=${LDFLAGS-"-s"} echo CC=$CC >> make_include echo CFLAGS=$CFLAGS >> make_include echo LDFLAGS=$LDFLAGS >> make_include DEFS= LIBS= compile='$CC $CFLAGS $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1' static_compile='$CC -static $DEFS conftest.c -o conftest $LIBS >/dev/null 2>&1' eval COMPILE='"'$compile'"' export COMPILE rm -f conftest.c conftest # # Find out about the existence of header files # # # H1. For fdisk/fdisksunlabel.c: is available? # Some kernels have that uses u_char # But maybe there is already a typedef. Let us use a #define # echo " #define u_char unsigned char #include #undef u_char main(){ exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "#define HAVE_scsi_h" >> defines.h echo "You have " else echo "You don't have " fi rm -f conftest conftest.c # # H2. For fdisk/fdisk.c: is available? # if ./testincl "linux/blkpg.h"; then echo "#define HAVE_blkpg_h" >> defines.h fi # # H3. Does exist? # if ./testincl "linux/kd.h"; then echo "#define HAVE_kd_h" >> defines.h fi # # H4. For lib/nls.h: do we have ? # if ./testincl "locale.h"; then echo "#define HAVE_locale_h" >> defines.h fi # # H5. For cal.c: do we have ? # if ./testincl "langinfo.h"; then echo "#define HAVE_langinfo_h" >> defines.h fi # # H6. For mkswap.c: do we have ? # if ./testincl "asm/page.h"; then echo "#define HAVE_asm_page_h" >> defines.h fi # # H7. For nfsmount.h: do we have ? # if ./testincl "asm/types.h"; then echo "#define HAVE_asm_types_h" >> defines.h fi # # Find out about the existence of functions # # # F1. For mount/nfsmount.c: is inet_aton() available? # echo " #include #include #include main(int a, char **v){ if (a == -1) /* false */ inet_aton((const char *) 0, (struct in_addr *) 0); exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "#define HAVE_inet_aton" >> defines.h echo "You have inet_aton()" else echo "You don't have inet_aton()" fi rm -f conftest conftest.c # # F2. For mkswap.c: is fsync() available? # echo " #include main(int a, char **v){ if (a == -1) /* false */ fsync(0); exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "#define HAVE_fsync" >> defines.h echo "You have fsync()" else echo "You don't have fsync()" fi rm -f conftest conftest.c # # F3. For agetty.c: is getdomainname() available? # echo " #include main(int a, char **v){ char buf[1]; if (a == -1) /* false */ getdomainname(buf, sizeof buf); exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "#define HAVE_getdomainname" >> defines.h echo "You have getdomainname()" else echo "You don't have getdomainname()" fi rm -f conftest conftest.c # # F4. For hwclock/kd.c: do we have nanosleep? # echo " #include int main () { struct timespec sleep = { 0, 1 }; nanosleep( &sleep, NULL ); exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "#define HAVE_nanosleep" >> defines.h echo "You have nanosleep()" else echo "You don't have nanosleep()" fi rm -f conftest conftest.c # # F5. For mkswap.c: do we have personality()? # echo " int main () { extern int personality(unsigned long); personality(0); exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "#define HAVE_personality" >> defines.h echo "You have personality()" else echo "You don't have personality()" fi rm -f conftest conftest.c # # 1. cytune.c may need struct tq_struct # echo " #include #include main(){ exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "You don't need " else echo "#define NEED_tqueue_h" >> defines.h echo "You need " fi rm -f conftest conftest.c # # 2. How is [n]curses installed? # test_curses_h=0 have_ncurses=1 if ! ./testincl "term.h"; then have_ncurses=0 elif ./testincl -q "ncurses/curses.h"; then echo "HAVE_NCURSES=yes" >> make_include echo "CURSESFLAGS=-I/usr/include/ncurses -DNCH=0" >> make_include echo "You have ncurses. Using ." elif ./testincl -q "ncurses.h"; then echo "HAVE_NCURSES=yes" >> make_include echo "CURSESFLAGS=-DNCH=1" >> make_include echo "You have ncurses. Using ." elif [ -f /usr/local/include/ncurses.h ]; then echo "HAVE_NCURSES=yes" >> make_include echo "CURSESFLAGS=-I/usr/local/include -DNCH=1" >> make_include echo "You have ncurses. Using /usr/local/include/ncurses.h." elif ./testincl -q "curses.h"; then test_curses_h=1 else have_ncurses=0 fi # # If we found a curses.h, test whether it is ncurses # (It should define __NCURSES_H and NCURSES_VERSION and NCURSES_CONST ...) # if [ $test_curses_h = 1 ]; then echo " #include main(){ char *c = NCURSES_VERSION; exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "HAVE_NCURSES=yes" >> make_include echo "CURSESFLAGS=-DNCH=0" >> make_include echo "You have ncurses. Using ." else have_ncurses=0 fi rm -f conftest conftest.c fi if [ $have_ncurses = 0 ]; then echo "HAVE_NCURSES=no" >> make_include echo "You don't have ncurses - I will not make ul and setterm." else echo "LIBCURSES=-lncurses" >> make_include fi # # Some systems have /usr/lib/termcap.so -> /usr/lib/termcap.so.2 # where however the latter file does not exist. When termcap does # not exist, we can try to compile more with curses instead. # echo ' #include main(){ exit(0); tgetnum("li"); } ' > conftest.c LIBS=-ltermcap eval $compile LIBS= if test -s conftest && ./conftest 2>/dev/null; then echo "#define HAVE_termcap" >> defines.h echo "LIBTERMCAP=-ltermcap" >> make_include echo "You have termcap" else echo "HAVE_TERMCAP=no" >> make_include if [ $have_ncurses = 0 ]; then echo "You don't have termcap - I will not make more." else echo "You don't have termcap" fi fi rm -f conftest conftest.c # # 4. Do we need -lcrypt? # echo ' #define _XOPEN_SOURCE #include main(){ char *c = crypt("abc","pw"); exit(0); } ' > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo "NEED_LIBCRYPT=no" >> make_include echo "You don't need -lcrypt" else echo "NEED_LIBCRYPT=yes" >> make_include echo "You need -lcrypt" fi rm -f conftest conftest.c # # 5. Does static compilation work? # echo " main(){ return 0; } " > conftest.c eval $static_compile if test -s conftest && ./conftest 2>/dev/null; then : OK, nothing special else echo "CAN_DO_STATIC=no" >> make_include echo "Strange... Static compilation fails here." fi rm -f conftest.c conftest # # 6. For lib/nls.h: do we have and gettext() ? # echo ' #include main(int a, char **v){ if (a == -1) /* false */ gettext("There is no gettext man page\n"); exit(0); } ' > conftest.c eval $compile if test -s conftest && ./conftest 2>/dev/null; then echo '#define HAVE_libintl_h' >> defines.h echo "You have and gettext()" echo '#define ENABLE_NLS' >> defines.h echo "Assuming that you want to enable NLS support." echo "(Otherwise, edit defines.h and remove the line with ENABLE_NLS)" ENABLE_NLS=yes else echo "You don't have " ENABLE_NLS=no fi rm -f conftest conftest.c # # 7. Does xgettext exist and take the option --foreign-user? # if (test $ENABLE_NLS = yes && type xgettext > /dev/null 2>&1); then msg=`xgettext --foreign-user 2>&1 | grep unrecognized` if test -n "$msg"; then echo "FOREIGN = " >> make_include else echo "FOREIGN = --foreign-user" >> make_include fi echo "HAVE_XGETTEXT=yes" >> make_include else echo "HAVE_XGETTEXT=no" >> make_include fi # # 8. For err.c: do we have __progname? # [make sure gcc -O does not optimize the access away] # echo " #include extern char *__progname; main(){ printf(__progname); exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest > /dev/null 2>/dev/null; then echo "#define HAVE_progname" >> defines.h echo "You have __progname" else echo "You don't have __progname" fi rm -f conftest conftest.c # # 9. For script.c: do we have and openpty()? # echo " #include main(){ exit(0); openpty(0, 0, 0, 0, 0); } " > conftest.c LIBS=-lutil eval $compile LIBS= if test -s conftest && ./conftest 2>/dev/null; then echo "HAVE_OPENPTY=yes" >> make_include echo "#define HAVE_openpty" >> defines.h echo "You have and openpty()" else echo "You don't have and openpty()" fi rm -f conftest conftest.c # # 10. For lib/widechar.h: do we have wide character support? # [Do we have the headers , , the types wchar_t, wint_t # and the fgetwc, fputwc, WEOF functions/macros?] # echo " #include #include #include int main () { wchar_t wc; wint_t w; w = fgetwc(stdin); if (w == WEOF) exit(1); wc = w; fputwc(wc,stdout); exit(0); } " > conftest.c eval $compile if test -s conftest && ./conftest < conftest.c > /dev/null 2>/dev/null; then echo "#define ENABLE_WIDECHAR" >> defines.h echo "You have wide character support" else echo "You don't have wide character support" fi rm -f conftest conftest.c # # 11. For pivot_root.c: does define __NR_pivot_root? # echo " #include int main(void) { return __NR_pivot_root; } " >conftest.c eval $compile if test -s conftest; then echo "HAVE_PIVOT_ROOT=yes" >> make_include echo "You have __NR_pivot_root" else echo "You don't have __NR_pivot_root" fi rm -f conftest conftest.c # # 12. For hwclock.c: does struct tm have a field tm_gmtoff? # echo " #include #include int main(int a, char **v) { struct tm *tm = localtime(0); if (a == -1) /* false */ sleep(tm->tm_gmtoff); exit(0); } " >conftest.c eval $compile if test -s conftest; then echo "#define HAVE_tm_gmtoff" >> defines.h echo "You have a tm_gmtoff field in struct tm" else echo "You don't have a tm_gmtoff field in struct tm" fi rm -f conftest conftest.c # # 13. For nfsmount: does the output of rpcgen compile? # # On some systems the output of rpcgen compiles with warnings # Here we conclude "Your rpcgen output does not compile" # and use pregenerated files. If one wishes to use rpcgen anyway, # just add the line "HAVE_GOOD_RPC=yes" to make_include. # rm -f conftest conftestx.c conftestl.c conftest.h conftest.x rm -f conftestx.o conftestl.o echo " #ifdef RPC_CLNT %#include /* for memset() */ #endif %#include typedef opaque fhandle[1]; union fhstatus switch (unsigned fhs_status) { case 0: fhandle fhs_fhandle; default: void; }; typedef string dirpath<1024>; struct ppathcnf { short pc_mask[2]; }; program MOUNTPROG { version MOUNTVERS { fhstatus MOUNTPROC_MNT(dirpath) = 1; } = 2; } = 100005; " > conftest.x if rpcgen -h -o conftest.h conftest.x 2> conferrs && \ rpcgen -c -o conftestx.c conftest.x 2>> conferrs && \ rpcgen -l -o conftestl.c conftest.x 2>> conferrs && \ cc -c conftestx.c 2>> conferrs && cc -c conftestl.c 2>> conferrs && \ test ! -s conferrs then echo "HAVE_GOOD_RPC=yes" >> make_include echo "Your rpcgen seems to work" else echo "Your rpcgen output does not compile" fi rm -f conftest conftestx.c conftestl.c conftest.h conftest.x conferrs rm -f conftestx.o conftestl.o