Arthur de Jong

Open Source / Free Software developer

summaryrefslogtreecommitdiffstats
path: root/configure.in
diff options
context:
space:
mode:
Diffstat (limited to 'configure.in')
-rw-r--r--configure.in321
1 files changed, 321 insertions, 0 deletions
diff --git a/configure.in b/configure.in
new file mode 100644
index 0000000..2a09e2e
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,321 @@
+AC_INIT(ldap-nss.c)
+AC_CANONICAL_SYSTEM
+AC_PREFIX_DEFAULT()
+
+AM_INIT_AUTOMAKE(nss_ldap, 251)
+AM_CONFIG_HEADER(config.h)
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+
+dnl
+dnl --enable-rfc2307bis is now deprecated; if this option is set,
+dnl then RFC2307bis support will be enabled by default. However
+dnl it can now always be enabled at runtime with the nss_schema
+dnl keyword. See nss_ldap(5) for more information.
+dnl
+AC_ARG_ENABLE(rfc2307bis, [ --enable-rfc2307bis use RFC2307bis schema by default ], [AC_DEFINE(RFC2307BIS)])
+
+dnl
+dnl --enable-schema-mapping is no longer necessary as schema
+dnl mapping is enabled by default
+dnl
+dnl AC_ARG_ENABLE(schema-mapping, [ --enable-schema-mapping enable attribute/objectclass mapping ], [AC_DEFINE(AT_OC_MAP)])
+dnl
+
+AC_ARG_ENABLE(debugging, [ --enable-debugging enable debug code ], [AC_DEFINE(DEBUG)])
+
+dnl
+dnl --enable-paged-results is now deprecated; if this option is set,
+dnl then paged results will be enabled by default. However, it can
+dnl now always be enabled at runtime (as long as the underlying LDAP
+dnl library supports ldap_search_ext()) with the nss_paged_results
+dnl keyword. See nss_ldap(5) for more information
+dnl
+AC_ARG_ENABLE(paged-results, [ --enable-paged-results use paged results control by default ], [AC_DEFINE(PAGE_RESULTS)])
+
+dnl
+dnl XXX TODO make configurable-krb5-ccname-* configurable at runtime
+dnl
+AC_ARG_ENABLE(configurable-krb5-ccname-env, [ --enable-configurable-krb5-ccname-env enable configurable Kerberos V credentials cache name (putenv method)], [AC_DEFINE(CONFIGURE_KRB5_CCNAME) AC_DEFINE(CONFIGURE_KRB5_CCNAME_ENV)])
+AC_ARG_ENABLE(configurable-krb5-ccname-gssapi, [ --enable-configurable-krb5-ccname-gssapi enable configurable Kerberos V credentials cache name (gssapi method)], [AC_DEFINE(CONFIGURE_KRB5_CCNAME) AC_DEFINE(CONFIGURE_KRB5_CCNAME_GSSAPI)])
+
+AC_ARG_WITH(ldap-lib, [ --with-ldap-lib=type select ldap library [auto|netscape5|netscape4|netscape3|umich|openldap]])
+AC_ARG_WITH(ldap-dir, [ --with-ldap-dir=DIR base directory of LDAP SDK])
+AC_ARG_WITH(ldap-conf-file, [ --with-ldap-conf-file path to LDAP configuration file],
+ [ NSS_LDAP_PATH_CONF="$with_ldap_conf_file" ],
+ [ NSS_LDAP_PATH_CONF="/etc/ldap.conf" ])
+AC_ARG_WITH(ldap-secret-file, [ --with-ldap-secret-file path to LDAP root secret file],
+ [ NSS_LDAP_PATH_ROOTPASSWD="$with_ldap_secret_file" ],
+ [ NSS_LDAP_PATH_ROOTPASSWD="/etc/ldap.secret" ])
+AC_ARG_WITH(gssapi-dir, [ --with-gssapi-dir=DIR base directory of gssapi SDK])
+AC_ARG_WITH(ngroups, [ --with-ngroups=num average group size hint, experts only], [AC_DEFINE_UNQUOTED(LDAP_NSS_NGROUPS, $with_ngroups)])
+
+AC_DEFINE_UNQUOTED(NSS_LDAP_PATH_CONF, "$NSS_LDAP_PATH_CONF")
+AC_DEFINE_UNQUOTED(NSS_LDAP_PATH_ROOTPASSWD, "$NSS_LDAP_PATH_ROOTPASSWD")
+AC_SUBST(NSS_LDAP_PATH_CONF)
+AC_SUBST(NSS_LDAP_PATH_ROOTPASSWD)
+
+if test "$ac_cv_prog_gcc" = "yes"; then CFLAGS="$CFLAGS -Wall -fPIC"; fi
+
+dnl This is needed for the native Solaris LDAP SDK and
+dnl OpenLDAP 2.2, respectively
+CPPFLAGS="$CPPFLAGS -DLDAP_REFERRALS -DLDAP_DEPRECATED"
+
+case "$target_os" in
+freebsd*) CPPFLAGS="$CPPFLAGS -DPIC -D_REENTRANT" ;;
+aix*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+esac
+
+# Always use native linker on Solaris and AIX
+# but only invoke directly if compiling with gcc (?)
+
+case "$target_os" in
+aix*) if test "$ac_cv_prog_gcc" = "yes"; then
+ nss_ldap_so_LD="/usr/bin/ld"
+ fi
+ LDFLAGS="$LDFLAGS -Wl,-brtl"
+ nss_ldap_so_LDFLAGS="-bM:SRE -bnoentry -bE:\$(srcdir)/exports.aix -brtl -lc"
+ NSS_LDAP_LDFLAGS="-bM:SRE -enss_ldap_initialize -brtl -lc"
+ CPPFLAGS="$CPPFLAGS -I."
+ need_pthread=yes
+ TARGET_OS=AIX ;;
+solaris*) if test "$ac_cv_prog_gcc" = yes; then
+ nss_ldap_so_LD="/usr/ccs/bin/ld"
+ fi
+ nss_ldap_so_LDFLAGS="-Bdynamic -M \$(srcdir)/exports.solaris -G" ;;
+hpux*) if test "$ac_cv_prog_gcc" = yes; then
+ nss_ldap_so_LD="/bin/ld"
+ fi
+ nss_ldap_so_LDFLAGS="-b -dynamic -G `cat exports.hpux`"
+ CPPFLAGS="$CPPFLAGS -I. -DHPUX"
+ TARGET_OS=HPUX ;;
+linux*) nss_ldap_so_LDFLAGS="-shared -Wl,-Bdynamic -Wl,--version-script,\$(srcdir)/exports.linux" ;;
+*) nss_ldap_so_LDFLAGS="-shared -Wl,-Bdynamic" ;;
+esac
+
+AM_CONDITIONAL(GLIBC, test "$target_os" = "linux" -o "$target_os" = "linux-gnu")
+AM_CONDITIONAL(AIX, test "$TARGET_OS" = AIX)
+AM_CONDITIONAL(HPUX, test "$TARGET_OS" = HPUX)
+
+AM_CONDITIONAL(USE_NATIVE_LINKER, test -n "$nss_ldap_so_LD")
+
+# unfortunately the linker flags have to be defined twice for
+# AIX as we can't force using the native linker for configure
+# tests, and the gcc front-end does not understand native
+# linker flags.
+if test -n "$with_ldap_dir"; then
+ CPPFLAGS="$CPPFLAGS -I$with_ldap_dir/include"
+ LDFLAGS="$LDFLAGS -L$with_ldap_dir/lib"
+ case "$target_os" in
+ aix*) LDFLAGS="$LDFLAGS -Wl,-blibpath:$with_ldap_dir/lib"
+ nss_ldap_so_LDFLAGS="$nss_ldap_so_LDFLAGS -L$with_ldap_dir/lib -blibpath:$with_ldap_dir/lib"
+ NSS_LDAP_LDFLAGS="$NSS_LDAP_LDFLAGS -L$with_ldap_dir/lib -blibpath:$with_ldap_dir/lib" ;;
+ hpux*) LDFLAGS="$LDFLAGS -Wl,+b$with_ldap_dir/lib"
+ nss_ldap_so_LDFLAGS="$nss_ldap_so_LDFLAGS -L$with_ldap_dir/lib +b$with_ldap_dir/lib" ;;
+ solaris*) LDFLAGS="$LDFLAGS -R$with_ldap_dir/lib"
+ nss_ldap_so_LDFLAGS="$nss_ldap_so_LDFLAGS -L$with_ldap_dir/lib -R$with_ldap_dir/lib" ;;
+ *) LDFLAGS="$LDFLAGS -Wl,-rpath,$with_ldap_dir/lib" ;;
+ esac
+fi
+if test -n "$with_gssapi_dir"; then
+ CPPFLAGS="$CPPFLAGS -I$with_gssapi_dir/include"
+ LDFLAGS="$LDFLAGS -L$with_gssapi_dir/lib"
+fi
+
+AC_SUBST(nss_ldap_so_LD)
+AC_SUBST(nss_ldap_so_LDFLAGS)
+AC_SUBST(NSS_LDAP_LDFLAGS)
+
+AC_CHECK_HEADERS(lber.h)
+AC_CHECK_HEADERS(ldap.h, , AC_MSG_ERROR(could not locate <ldap.h>))
+AC_CHECK_HEADERS(ldap_ssl.h)
+
+dnl AC_MSG_CHECKING(for ldap_ssl.h)
+dnl AC_TRY_COMPILE([#include <sys/types.h>
+dnl #include <ldap.h>
+dnl #include <ldap_ssl.h>], ,
+dnl [
+dnl AC_MSG_RESULT(yes),
+dnl AC_DEFINE(HAVE_LDAP_SSL_H, 1)
+dnl ],
+dnl AC_MSG_RESULT(no))
+
+# For HP-UX and AIX we use private API, the headers for which
+# are included locally. We need to do something to stop both
+# API being detected.
+case "$target_os" in
+ aix*) AC_CHECK_HEADERS(irs.h usersec.h) ;;
+ hpux*) AC_CHECK_HEADERS(nsswitch.h) ;;
+ *) AC_CHECK_HEADERS(nss.h)
+ AC_CHECK_HEADERS(nsswitch.h)
+ AC_CHECK_HEADERS(irs.h) ;;
+esac
+AC_CHECK_HEADERS(thread.h)
+AC_CHECK_HEADERS(pthread.h)
+AC_CHECK_HEADERS(synch.h)
+AC_CHECK_HEADERS(malloc.h)
+AC_CHECK_HEADERS(shadow.h)
+AC_CHECK_HEADERS(prot.h)
+AC_CHECK_HEADERS(port_before.h)
+AC_CHECK_HEADERS(port_after.h)
+AC_CHECK_HEADERS(aliases.h)
+AC_CHECK_HEADERS(net/route.h)
+AC_CHECK_HEADERS(netinet/if_ether.h)
+AC_CHECK_HEADERS(netinet/ether.h)
+AC_CHECK_HEADERS(ctype.h)
+dnl AC_CHECK_HEADERS(db.h)
+dnl AC_CHECK_HEADERS(db1/db.h)
+dnl AC_CHECK_HEADERS(db_185.h)
+dnl AC_CHECK_HEADERS(db3/db_185.h)
+AC_CHECK_HEADERS(alignof.h)
+AC_CHECK_HEADERS(rpc/rpcent.h)
+AC_CHECK_HEADERS(sys/byteorder.h)
+AC_CHECK_HEADERS(sys/un.h)
+AC_CHECK_HEADERS(libc-lock.h)
+AC_CHECK_HEADERS(bits/libc-lock.h)
+AC_CHECK_HEADERS(sasl.h sasl/sasl.h)
+AC_CHECK_HEADERS(strings.h)
+AC_CHECK_HEADERS(gssldap.h)
+AC_CHECK_HEADERS(gsssasl.h)
+AC_CHECK_HEADERS(gssapi/gssapi_krb5.h gssapi.h)
+
+AC_CHECK_LIB(resolv, main)
+AC_CHECK_LIB(nsl, main)
+AC_CHECK_LIB(socket, main)
+
+AC_CHECK_FUNCS(strtok_r)
+AC_CHECK_FUNCS(sigaction)
+AC_CHECK_FUNCS(sigset)
+AC_CHECK_FUNCS(res_search)
+AC_CHECK_FUNCS(dn_expand)
+AC_CHECK_FUNCS(snprintf)
+AC_CHECK_FUNCS(gethostbyname)
+AC_CHECK_FUNCS(nsdispatch)
+AC_CHECK_FUNCS(pthread_atfork)
+AC_CHECK_FUNCS(ether_aton)
+AC_CHECK_FUNCS(ether_ntoa)
+
+AC_MSG_CHECKING(for struct ether_addr)
+AC_TRY_COMPILE([#include <sys/types.h>
+ #include <sys/socket.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
+ #include <netinet/if_ether.h>],
+ [struct ether_addr x;],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_STRUCT_ETHER_ADDR, 1)
+ ],
+ AC_MSG_RESULT(no))
+
+AC_MSG_CHECKING(for socklen_t)
+AC_TRY_COMPILE([#include <sys/types.h>
+ #include <sys/socket.h>],
+ [socklen_t len;],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_SOCKLEN_T, 1)
+ ],
+ AC_MSG_RESULT(no))
+
+AC_MSG_CHECKING(for pw_change in struct passwd)
+AC_TRY_COMPILE([#include <pwd.h>],
+ [struct passwd pwd; time_t t = pwd.pw_change],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PASSWD_PW_CHANGE, 1)
+ ],
+ AC_MSG_RESULT(no))
+AC_MSG_CHECKING(for pw_expire in struct passwd)
+AC_TRY_COMPILE([#include <pwd.h>],
+ [struct passwd pwd; time_t t = pwd.pw_expire],
+ [
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_PASSWD_PW_EXPIRE, 1)
+ ],
+ AC_MSG_RESULT(no))
+
+dnl check which ldap library we have
+dnl check which ldap library we have
+if test -z "$with_ldap_lib"; then
+ with_ldap_lib=auto
+fi
+
+AC_CHECK_LIB(dl, dlopen,[LIBS="-ldl $LIBS"],,$LIBS)
+dnl AC_CHECK_LIB(db, main,[LIBS="-ldb $LIBS"],,$LIBS)
+
+AC_CHECK_LIB(gssapi, gss_krb5_ccache_name,[LIBS="-lgssapi $LIBS" found_gssapi_lib=yes],,$LIBS)
+if test -z "$found_gssapi_lib"; then
+ AC_CHECK_LIB(gssapi_krb5, gss_krb5_ccache_name,[LIBS="-lgssapi_krb5 $LIBS"],,$LIBS)
+fi
+
+dnl Following checks probably not strictly necessary.
+dnl AC_CHECK_LIB(crypto, main,[LIBS="-lcrypto $LIBS"],,$LIBS)
+dnl AC_CHECK_LIB(ssl, main,[LIBS="-lssl $LIBS"],,$LIBS)
+dnl AC_CHECK_LIB(com_err, main,[LIBS="-lcom_err $LIBS"],,$LIBS)
+dnl AC_CHECK_LIB(k5crypto, main,[LIBS="-lk5crypto $LIBS"],,$LIBS)
+dnl AC_CHECK_LIB(krb5, main,[LIBS="-lkrb5 $LIBS"],,$LIBS)
+dnl AC_CHECK_LIB(krb4, main,[LIBS="-lkrb4 $LIBS"],,$LIBS)
+dnl AC_CHECK_LIB(sasl, sasl_client_init,[LIBS="-lsasl $LIBS"],,$LIBS)
+
+if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = umich -o $with_ldap_lib = openldap \); then
+ AC_CHECK_LIB(lber, main)
+ AC_CHECK_LIB(ldap, main, [LIBS="-lldap $LIBS" found_ldap_lib=yes],,$LIBS)
+fi
+if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape5 \); then
+AC_CHECK_LIB(ldap50, main, LIBS="-lldap50 -lssldap50 -lssl3 -lnss3 -lnspr4 -lprldap50 -lplc4 -lplds4 $LIBS" found_ldap_lib=yes need_pthread=yes,, -lpthread)
+fi
+if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape4 \); then
+ AC_CHECK_LIB(ldapssl41, main, LIBS="-lldapssl41 -lplc3 -lplds3 -lnspr3 $LIBS" found_ldap_lib=yes need_pthread=yes,, -lpthread)
+ if test -z "$found_ldap_lib"; then
+ AC_CHECK_LIB(ldapssl40, main, LIBS="-lldapssl40 $LIBS" found_ldap_lib=yes need_pthread=yes,, -lpthread)
+ fi
+ if test -z "$found_ldap_lib"; then
+ AC_CHECK_LIB(ldap41, main, LIBS="-lldap41 $LIBS" found_ldap_lib=yes need_pthread=no,,)
+ fi
+ if test -z "$found_ldap_lib"; then
+ AC_CHECK_LIB(ldap40, main, LIBS="-lldap40 $LIBS" found_ldap_lib=yes need_pthread=no,,)
+ fi
+fi
+if test -z "$found_ldap_lib" -a \( $with_ldap_lib = auto -o $with_ldap_lib = netscape3 \); then
+ AC_CHECK_LIB(ldapssl30, main, LIBS="-lldapssl30 $LIBS" found_ldap_lib=yes need_pthread=yes,, -lpthread)
+fi
+
+if test -z "$found_ldap_lib"; then
+ AC_MSG_ERROR(could not locate a valid LDAP library)
+fi
+
+if test "$need_pthread" = "yes"; then
+ AC_CHECK_LIB(pthread, main)
+fi
+
+AC_CHECK_LIB(gssldap, ldap_gss_bind,[LIBS="-lgssldap $LIBS"],,$LIBS)
+
+AC_CHECK_FUNCS(sasl_auxprop_request)
+AC_CHECK_FUNCS(ldap_init ldap_get_lderrno ldap_parse_result ldap_memfree ldap_controls_free)
+AC_CHECK_FUNCS(ldap_ld_free ldap_explode_rdn ldap_set_option ldap_get_option)
+AC_CHECK_FUNCS(ldap_sasl_interactive_bind_s ldap_initialize ldap_search_ext)
+AC_CHECK_FUNCS(ldap_create_control ldap_create_page_control ldap_parse_page_control)
+if test "$enable_ssl" \!= "no"; then
+ AC_CHECK_FUNCS(ldapssl_client_init ldap_start_tls_s ldap_pvt_tls_set_option ldap_start_tls)
+fi
+AC_CHECK_FUNCS(gethostbyname_r)
+
+if test "$ac_cv_func_gethostbyname_r" = "yes"; then
+AC_CACHE_CHECK(whether gethostbyname_r takes 6 arguments, nss_ldap_cv_gethostbyname_r_args, [
+AC_TRY_COMPILE([
+#include <netdb.h>], [gethostbyname_r(0, 0, 0, 0, 0, 0);], [nss_ldap_cv_gethostbyname_r_args=6], [nss_ldap_cv_gethostbyname_r_args=5]) ])
+AC_DEFINE_UNQUOTED(GETHOSTBYNAME_R_ARGS, $nss_ldap_cv_gethostbyname_r_args)
+fi
+
+AC_CHECK_FUNCS(ldap_set_rebind_proc)
+AC_CACHE_CHECK(whether ldap_set_rebind_proc takes 3 arguments, nss_ldap_cv_ldap_set_rebind_proc, [
+AC_TRY_COMPILE([
+#include <lber.h>
+#include <ldap.h>], [ldap_set_rebind_proc(0, 0, 0);], [nss_ldap_cv_ldap_set_rebind_proc=3], [nss_ldap_cv_ldap_set_rebind_proc=2]) ])
+AC_DEFINE_UNQUOTED(LDAP_SET_REBIND_PROC_ARGS, $nss_ldap_cv_ldap_set_rebind_proc)
+
+AC_OUTPUT(Makefile)