configure.in   [plain text]


dnl Process this file with autoconf to produce a configure script.
AC_INIT(conf/pam_conv1/pam_conv.y)

dnl The configuration header file
AC_CONFIG_HEADER(_pam_aconf.h)

dnl
dnl Release specific
dnl

dnl Change the version numbering.  This is because of the dyld attention
dnl to the version number and binary compatibility.
LIBPAM_VERSION_MAJOR=1
LIBPAM_VERSION_MINOR=0

AC_SUBST(LIBPAM_VERSION_MAJOR)
AC_SUBST(LIBPAM_VERSION_MINOR)
AC_DEFINE(LIBPAM_VERSION_MAJOR)
AC_DEFINE(LIBPAM_VERSION_MINOR)

dnl
dnl By default, everything under PAM is installed under the root fs.
dnl

AC_PREFIX_DEFAULT()

dnl
dnl Useful info (believed to be portable)
dnl
LOCALSRCDIR=`/bin/pwd`         ; AC_SUBST(LOCALSRCDIR)
OS=`uname|sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
AC_SUBST(OS)

dnl
dnl Rules needed for the following (hardcoded Linux defaults for now)
dnl

CONF_CFLAGS=			; AC_SUBST(CONF_CFLAGS)
MKDIR="mkdir -p"		; AC_SUBST(MKDIR)

SHLIBMODE=755			; AC_SUBST(SHLIBMODE)

dnl These are most likely platform specific - I think HPUX differs
LDCONFIG=/usr/bin/true		; AC_SUBST(LDCONFIG)

dnl ### Should enable this INSTALL detection.
dnl ### Would need to distribute GNU's config.guess and config.sub
dnl AC_PROG_INSTALL
if test "$OS" = "aix"; then
  INSTALL=/usr/ucb/install -c
else
  INSTALL=/usr/bin/install
fi
AC_SUBST(INSTALL)

dnl Checks for programs.
AC_PROG_CC
dnl ### AC_PROG_CXX
AC_PROG_YACC
AC_PROG_LEX
dnl AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET

dnl
dnl options and defaults
dnl

dnl lots of debugging information goes to /tmp/pam-debug.log
AC_ARG_ENABLE(debug,
[  --enable-debug           specify you are building with debugging on],
	WITH_DEBUG=yes ; AC_DEFINE(DEBUG) , WITH_DEBUG=no)
AC_SUBST(WITH_DEBUG)

AC_ARG_ENABLE(memory-debug,
[  --enable-memory-debug    specify you want every malloc etc. call tracked],
	WITH_MEMORY_DEBUG=yes ; AC_DEFINE(MEMORY_DEBUG) , WITH_MEMORY_DEBUG=no)
AC_SUBST(WITH_MEMORY_DEBUG)

dnl build specially named libraries (for debugging purposes)
AC_ARG_ENABLE(libdebug,
[  --enable-libdebug        specify you are building debugging libraries],
	WITH_LIBDEBUG=yes ; AC_DEFINE(WITH_LIBDEBUG) , WITH_LIBDEBUG=no)
AC_SUBST(WITH_LIBDEBUG)

dnl packaging convenience
AC_ARG_ENABLE(fakeroot,
[  --enable-fakeroot=<path to packaging directory>], FAKEROOT=$enableval)
AC_SUBST(FAKEROOT)

AC_ARG_ENABLE(securedir,
[  --enable-securedir=<path to location of PAMs> [default \$libdir/security]],
	SECUREDIR=$enableval, SECUREDIR=$libdir/security)
AC_SUBST(SECUREDIR)

AC_ARG_ENABLE(sconfigdir,
[  --enable-sconfigdir=<path to module conf files> [default \$sysconfdir/security]],
	SCONFIGDIR=$enableval, SCONFIGDIR=$sysconfdir/security)
AC_SUBST(SCONFIGDIR)

AC_ARG_ENABLE(suplementedir,
[  --enable-suplementedir=<path to module helper binaries> [default \$sbindir]],
	SUPLEMENTED=$enableval, SUPLEMENTED=$sbindir)
AC_SUBST(SUPLEMENTED)

AC_ARG_ENABLE(includedir,
[  --enable-includedir=<path to include location> - where to put <security>],
	INCLUDEDIR=$enableval, INCLUDEDIR=/usr/include)
AC_SUBST(INCLUDEDIR)

AC_ARG_ENABLE(docdir,
[  --enable-docdir=<path to store documentation in - /usr/share/doc/pam>],
	DOCDIR=$enableval, DOCDIR=/usr/share/doc/pam)
AC_SUBST(DOCDIR)

AC_ARG_ENABLE(mandir,
[  --enable-mandir=<path to store manuals in - /usr/share/man>],
	MANDIR=$enableval, MANDIR=/usr/share/man)
AC_SUBST(MANDIR)

AC_ARG_ENABLE(pamlocking,
[  --enable-pamlocking      configure libpam to observe a global authentication lock],
	WITH_PAMLOCKING=yes ; AC_DEFINE(PAM_LOCKING) , WITH_PAMLOCKING=no)
AC_SUBST(WITH_PAMLOCKING)

AC_ARG_ENABLE(uglyhack,
[  --enable-uglyhack        configure libpam to try to honor old pam_strerror syntax],
	AC_DEFINE(UGLY_HACK_FOR_PRIOR_BEHAVIOR_SUPPORT))

AC_ARG_ENABLE(read-both-confs,
[  --enable-read-both-confs  read both /etc/pam.d and /etc/pam.conf files],
	AC_DEFINE(PAM_READ_BOTH_CONFS))
AC_SUBST(PAM_READ_BOTH_CONFS)

AC_ARG_ENABLE(static-libpam, [  --enable-static-libpam   build a libpam.a library],
	STATIC_LIBPAM=yes , STATIC_LIBPAM=no)
AC_SUBST(STATIC_LIBPAM)

AC_ARG_ENABLE(giant-libpam, [  --enable-giant-libpam   build a giant libpam shared library],
	GIANT_LIBPAM=yes , GIANT_LIBPAM=no)
AC_SUBST(GIANT_LIBPAM)

AC_ARG_ENABLE(dynamic-libpam,
[  --disable-dynamic-libpam do not build a shared libpam library],
	DYNAMIC_LIBPAM=no, DYNAMIC_LIBPAM=yes)
AC_SUBST(DYNAMIC_LIBPAM)

DYNAMIC=-DPAM_DYNAMIC
AC_SUBST(DYNAMIC)

AC_ARG_ENABLE(static-modules,
[  --enable-static-modules  do not make the modules dynamically loadable],
	STATIC=-DPAM_STATIC)
AC_SUBST(STATIC)

AC_ARG_ENABLE(lckpwdf,
[  --disable-lckpwdf do not use the lckpwdf function],
	WITH_LCKPWDF=no, WITH_LCKPWDF=yes)
AC_SUBST(WITH_LCKPWDF)

AC_CHECK_HEADERS(paths.h)
AC_ARG_WITH(mailspool,
[  --with-mailspool         path to mail spool directory
                           [default _PATH_MAILDIR if defined in paths.h, otherwise /var/spool/mail]],
with_mailspool=${withval})
if test x$with_mailspool != x ; then
	pam_mail_spool="\"$with_mailspool\""
else
	AC_TRY_RUN([
#include <paths.h>
int main() {
#ifdef _PATH_MAILDIR
exit(0);
#else
exit(1);
#endif
}], pam_mail_spool="_PATH_MAILDIR",
pam_mail_spool="\"/var/spool/mail\"",
pam_mail_spool="\"/var/spool/mail\"")
fi
AC_DEFINE_UNQUOTED(PAM_PATH_MAILDIR, $pam_mail_spool)

dnl Checks for libraries.
AC_CHECK_LIB(c, __libc_sched_setscheduler, PAM_NEEDS_LIBC=, PAM_NEEDS_LIBC=-lc)
AC_SUBST(PAM_NEEDS_LIBC)

dnl Check for dyld 
AC_CHECK_LIB(c, NSCreateObjectFileImageFromFile, [AC_DEFINE(PAM_DYLD)])

AC_CHECK_LIB(c, strcasecmp, [AC_DEFINE(HAVE_STRCASECMP)])

dnl Checks for the existence of lckpwdf in libc
AC_CHECK_LIB(c, lckpwdf, HAVE_LCKPWDF=yes, HAVE_LCKPWDF=no)
AC_SUBST(HAVE_LCKPWDF)

dnl Checks for the existence of libdl - on BSD and Tru64 its part of libc
AC_CHECK_LIB(dl, dlopen, LIBDL=-ldl) 
AC_SUBST(LIBDL)

dnl
dnl At least on Solaris, the existing libcrack must be dynamic.
dnl Ought to introduce a check for this.
dnl
AC_CHECK_LIB(crack, FascistCheck, HAVE_LIBCRACK=yes ; AC_DEFINE(HAVE_LIBCRACK),
	HAVE_LIBCRACK=no)
AC_SUBST(HAVE_LIBCRACK)

AC_CHECK_LIB(crypt, fcrypt, HAVE_LIBCRYPT=yes ; AC_DEFINE(HAVE_LIBCRYPT),
	HAVE_LIBCRYPT=no)
AC_SUBST(HAVE_LIBCRYPT)
AC_CHECK_LIB(util, logwtmp, HAVE_LIBUTIL=yes ; AC_DEFINE(HAVE_LIBUTIL),
	HAVE_LIBUTIL=no)
AC_SUBST(HAVE_LIBUTIL)
AC_CHECK_LIB(ndbm, dbm_store, HAVE_LIBNDBM=yes ; AC_DEFINE(HAVE_LIBNDBM),
	HAVE_LIBNDBM=no)
AC_SUBST(HAVE_LIBNDBM)
AC_CHECK_LIB(db, dbm_store, HAVE_LIBDB=yes ; AC_DEFINE(HAVE_LIBDB),
	HAVE_LIBDB=no)
if test x$HAVE_LIBDB != xyes ; then
	AC_CHECK_LIB(db, db_create, HAVE_LIBDB=yes ; AC_DEFINE(HAVE_LIBDB),
	HAVE_LIBDB=no)
fi
AC_SUBST(HAVE_LIBDB)
AC_CHECK_LIB(fl, yylex, yyterminate, HAVE_LIBFL=yes ; AC_DEFINE(HAVE_LIBFL),
	HAVE_LIBFL=no)
AC_SUBST(HAVE_LIBFL)
AC_CHECK_LIB(nsl, yp_maplist, HAVE_LIBNSL=yes ; AC_DEFINE(HAVE_LIBNSL),
	HAVE_LIBNSL=no)
AC_SUBST(HAVE_LIBNSL)
AC_CHECK_LIB(pwdb, pwdb_db_name, HAVE_LIBPWDB=yes ; AC_DEFINE(HAVE_LIBPWDB),
	HAVE_LIBPWDB=no)
AC_SUBST(HAVE_LIBPWDB)

dnl Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_HEADER_SYS_WAIT
AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/file.h sys/ioctl.h sys/time.h syslog.h termio.h unistd.h sys/fsuid.h)

dnl Linux wants features.h in some of the source files.
AC_CHECK_HEADERS(features.h)

dnl For module/pam_cracklib
AC_CHECK_HEADERS(crypt.h)

dnl For module/pam_userdb
AC_CHECK_HEADERS(ndbm.h db.h)
dnl I suspect the following two lines are a hack.
HAVE_NDBM_H=$ac_cv_header_ndbm_h
AC_SUBST(HAVE_NDBM_H)

dnl For module/pam_lastlog
AC_CHECK_HEADERS(lastlog.h utmp.h utmpx.h)

dnl This following rule should be made conditional upon HAVE_LIBCRYPT
dnl being found.

dnl Look for cracklib dictionary
AC_MSG_CHECKING(path to cracklib dictionary)
DICT_DIR_CANDIDATES="/usr/lib /usr/share/dict /usr/share/lib \
  /usr/local/lib /usr/local/share/lib"
DICT_FILE_CANDIDATES="pw_dict cracklib_dict"
CRACKLIB_DICTPATH=""
for d in $DICT_DIR_CANDIDATES ; do
      for f in $DICT_FILE_CANDIDATES ; do
              if test -r $d/$f.hwm ; then
                      CRACKLIB_DICTPATH=$d/$f
                      break 2
              elif test -r $d/dict/$f.hwm ; then
                      CRACKLIB_DICTPATH=$d/dict/$f
                      break 2
              fi
      done
done
if test -z "$CRACKLIB_DICTPATH" ; then
      AC_MSG_RESULT(none found)
else
      AC_MSG_RESULT($CRACKLIB_DICTPATH)
fi
AC_SUBST(CRACKLIB_DICTPATH)

dnl Set FLAGS, linker options etc. depending on C compiler.
dnl gcc is tested and much preferred; others less so, if at all
dnl
dnl If compiling with gcc, linking is also supposed to be done with gcc;
dnl since we use linker-specific arguments, we may not gain anything by
dnl switching LD_L over, but I think we can use LD_D as-is.
dnl
dnl For the moment, gcc is enforced above at "CC=gcc".
dnl
dnl There is an issue over _POSIX_SOURCE _BSD_SOURCE and _GNU_SOURCE .
dnl The original "Linux-PAM" had blanket inclusion.  But portability
dnl requires their default absence: if particular OSes require them,
dnl this should be done selectively.

GCC_WARNINGS="-Wall -Wwrite-strings \
	-Wpointer-arith -Wcast-qual -Wcast-align \
	-Wstrict-prototypes -Wmissing-prototypes \
	-Wnested-externs -Winline -Wshadow"

if test "$GCC" = yes; then
	CC=gcc				; AC_SUBST(CC)
### May need per-OS attention
### Example: -D_POSIX_SOURCE: needed on Linux but harms Solaris.
	case $OS in
	linux)
		OS_CFLAGS="-ansi -D_POSIX_SOURCE -pedantic"
		LD_D="gcc -shared -Xlinker -x"
		WARNINGS="$GCC_WARNINGS"
		PIC="-fPIC"
		DYNTYPE=so
		LD=ld				
		LD_L="$LD -x -shared"
		RANLIB=ranlib
		STRIP=strip
		CC_STATIC="-Xlinker -export-dynamic"
		USESONAME=yes			; AC_SUBST(USESONAME)
		SOSWITCH=-soname		; AC_SUBST(SOSWITCH)
		NEEDSONAME=no			; AC_SUBST(NEEDSONAME)
		;;
	sunos)
		OS_CFLAGS="-ansi -pedantic"
		LD_D="gcc -shared -Xlinker -x"
		WARNINGS="$GCC_WARNINGS"
		PIC="-fPIC"
		DYNTYPE=so
		LD=ld				
		LD_L="$LD -x -shared"
		RANLIB=ranlib
		STRIP=strip
		CC_STATIC="-Xlinker -export-dynamic"
		USESONAME=yes			; AC_SUBST(USESONAME)
		SOSWITCH=-soname		; AC_SUBST(SOSWITCH)
		NEEDSONAME=no			; AC_SUBST(NEEDSONAME)
		;;
	aix)
		OS_CFLAGS=""
		DYNTYPE=lo
		LD=ld				
		LD_L=ld -bexpall -bM:SRE -bnoentry
		LD_D="$LD_L"
		RANLIB=ranlib
		STRIP=strip
		USESONAME=yes			; AC_SUBST(USESONAME)
		SOSWITCH=-soname		; AC_SUBST(SOSWITCH)
		NEEDSONAME=no			; AC_SUBST(NEEDSONAME)
		;;
	darwin*)
		OS_CFLAGS="-no-cpp-precomp"
		DYNTYPE=dylib
		LD=ld
		LD_D='cc -bundle $(CFLAGS)'
		LD_L='cc -dynamiclib -compatibility_version $(MAJOR_REL).$(MINOR_REL) -current_version $(MAJOR_REL).$(MINOR_REL) $(CFLAGS) -all_load'
		RANLIB=ranlib
		STRIP=strip
		CC_STATIC="-Xlinker -export-dynamic"
		PAM_NEEDS_PAM="-L$LOCALSRCDIR/libpam -lpam"
		AC_SUBST(PAM_NEEDS_PAM)
		USESONAME=yes			; AC_SUBST(USESONAME)
		SOSWITCH=-install_name		; AC_SUBST(SOSWITCH)
		;;
	*)
		OS_CFLAGS=""
		USESONAME=yes			; AC_SUBST(USESONAME)
		SOSWITCH=-soname		; AC_SUBST(SOSWITCH)
		NEEDSONAME=no			; AC_SUBST(NEEDSONAME)
		;;
	esac
else
###
### Non-gcc needs attention on per-OS basis
###
	case "$OS" in
	solaris)
	    ### Support for Solaris-C
	    OS_CFLAGS=""
	    WARNINGS=""
	    PIC="-K pic"
	    LD=ld
	    LD_D="cc -z text -G -R."
	    LD_L="$LD_D"
	    RANLIB=ranlib
	    STRIP=strip
	    CC_STATIC=
	    ;;
	irix*)
	    OSRELEASE=`uname -r`
	    if test "$OSRELEASE" = 6.5; then
		OS_CFLAGS=""
		WARNINGS="-fullwarn"
		PIC=                    #PIC code is default for IRIX
		LD="cc -shared"         # modules friendly approach
		LD_D="cc -shared"
		LD_L="ld -G -z redlocsym"
		RANLIB=echo
		STRIP=strip
		CC_STATIC=
	    else
		echo "IRIX prior to 6.5 not allowed for"
		exit
	    fi
	    ;;
       *) echo "Native compiler on $OS is not yet supported"
               exit
	    ;;
       esac
fi

AC_SUBST(DYNTYPE)
AC_SUBST(OS_CFLAGS)
AC_SUBST(WARNINGS)
AC_SUBST(PIC)
AC_SUBST(LD)
AC_SUBST(LD_D)
AC_SUBST(LD_L)
AC_SUBST(RANLIB)
AC_SUBST(STRIP)
AC_SUBST(CC_STATIC)

dnl Checks for typedefs, structures, and compiler characteristics.
AC_C_BIGENDIAN
AC_C_CONST
AC_TYPE_UID_T
AC_TYPE_OFF_T
AC_TYPE_PID_T
AC_TYPE_SIZE_T
AC_HEADER_TIME
AC_STRUCT_TM

dnl Checks for library functions.
AC_TYPE_GETGROUPS
AC_PROG_GCC_TRADITIONAL
AC_FUNC_MEMCMP
AC_FUNC_VPRINTF
AC_CHECK_FUNCS(gethostname gettimeofday mkdir select strcspn strdup strerror strspn strstr strtol uname)

AC_CHECK_FUNCS(getpwnam_r getgrnam_r)

dnl Checks for programs/utilities
AC_CHECK_PROG(HAVE_SGML2TXT, sgml2txt, yes, no)
AC_CHECK_PROG(HAVE_SGML2HTML, sgml2html, yes, no)
AC_CHECK_PROG(HAVE_SGML2LATEX, sgml2latex, yes, no)
if test $HAVE_SGML2LATEX = "yes" ; then
  if sgml2latex -h | grep -e --paper | grep  ' -p ' > /dev/null ; then
    PSER="sgml2latex -o ps"
  else
    PSER="sgml2latex -p"
  fi
else
  AC_CHECK_PROG(HAVE_SGML2PS, sgml2ps, yes, no)
  if test $HAVE_SGML2PS = yes ; then
    PSER="sgml2ps"
  fi
fi
AC_SUBST(PSER)

dnl Files to be created from when we run configure
AC_OUTPUT(Make.Rules)