AC_PREREQ(2.59)
m4_include([version.m4])
AC_INIT([gssproxy],
VERSION_NUMBER,
[simo@redhat.com])
m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
[AC_USE_SYSTEM_EXTENSIONS],
[AC_GNU_SOURCE])
AC_PROG_CC_C99
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE"
AC_CONFIG_SRCDIR([BUILD.txt])
AM_INIT_AUTOMAKE([-Wall foreign subdir-objects tar-pax])
AM_PROG_CC_C_O
AM_PROG_AR
AC_PROG_INSTALL
LT_INIT([disable-static])
AC_CONFIG_MACRO_DIR([m4])
AM_GNU_GETTEXT([external])
AM_GNU_GETTEXT_VERSION([0.14])
AC_SUBST([PRERELEASE_VERSION],
PRERELEASE_VERSION_NUMBER)
AC_DEFINE([PRERELEASE_VERSION], "PRERELEASE_VERSION_NUMBER",
[Prerelease version number of package])
AM_CONDITIONAL([GIT_CHECKOUT], [git log -1 &>/dev/null])
m4_pattern_allow([AM_SILENT_RULES])
AM_SILENT_RULES
AM_CONDITIONAL([HAVE_GCC], [test "$ac_cv_prog_gcc" = yes])
AC_CHECK_HEADERS(stdint.h dlfcn.h)
AC_CONFIG_HEADER(config.h)
AC_CHECK_TYPES([errno_t], [], [], [[#include <errno.h>]])
m4_include([build_macros.m4])
BUILD_WITH_SHARED_BUILD_DIR
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include <pthread.h>]],
[[pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;]])],
[AC_DEFINE([HAVE_PTHREAD], [1], [Pthread mutexes available.])],
[AC_MSG_WARN([Pthread library not found! Clients will not be thread safe...])])
m4_include([external/platform.m4])
m4_include(conf_macros.m4)
WITH_DISTRO_VERSION
WITH_CC_PATH
WITH_LOG_PATH
WITH_PUBCONF_PATH
WITH_SOCKET_NAME
WITH_PID_FILE
WITH_TEST_DIR
WITH_MANPAGES
WITH_XML_CATALOG
WITH_SELINUX
WITH_GSSIDEBUG
WITH_GPSTATE_PATH
WITH_GPP_DEFAULT_BEHAVIOR
WITH_HARDENING
m4_include([external/pkg.m4])
m4_include([external/libpopt.m4])
m4_include([external/docbook.m4])
m4_include([external/sizes.m4])
m4_include([external/selinux.m4])
m4_include([external/libkeyutils.m4])
m4_include([external/systemd.m4])
m4_include([external/ax_pthread.m4])
PKG_CHECK_MODULES([VERTO], [libverto >= 0.2.2], [have_libverto=1], [have_libverto=])
if test x$have_libverto = x; then
AC_MSG_ERROR([Could not find VERTO headers])
fi
AC_CHECK_LIB(verto, verto_free,,
AC_MSG_ERROR(["Error: libverto is not found or lacks verto_free"]))
AC_CHECK_FUNCS(verto_cleanup,,
AC_MSG_WARN(["Warning: libverto lacks verto_cleanup function"]))
#Check for libini_config
PKG_CHECK_MODULES([LIBINI_CONFIG], [ini_config >= 1.2.0], [have_libini_config=1], [have_libini_config=])
if test x$have_libini_config = x; then
AC_MSG_WARN([Could not find LIBINI_CONFIG headers])
else
INI_CONFIG_CFLAGS="`$PKG_CONFIG --cflags ini_config`"
INI_CONFIG_LIBS="`$PKG_CONFIG --libs ini_config`"
AC_CHECK_LIB(ini_config, ini_config_file_open, [],
[AC_MSG_WARN([ini_config library must support ini_config_file_open])],
[$INI_CONFIG_LIBS])
AC_CHECK_LIB(ini_config, ini_config_augment, [],
[AC_MSG_WARN([ini_config library must support ini_config_augment])],
[$INI_CONFIG_LIBS])
fi
if test x$have_libini_config = x1; then
INI_CFLAGS="$INI_CONFIG_CFLAGS"
INI_LIBS="$INI_CONFIG_LIBS"
else
AC_MSG_ERROR([ini_config development packages not available])
fi
AC_SUBST(INI_LIBS)
AC_SUBST(INI_CFLAGS)
AC_CHECK_LIB(ref_array, ref_array_destroy, [],
[AC_MSG_WARN([ref_array library must support ref_array_destroy])],
[$INI_CONFIG_LIBS])
AC_RUN_IFELSE([AC_LANG_SOURCE([[
/* See: https://pagure.io/SSSD/ding-libs/pull-request/3172 */
#include <linux/limits.h>
#include <string.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <ini_configobj.h>
#include <ini_config.h>
static int write_to_file(char *path, char *text)
{
FILE *f = fopen(path, "w");
int bytes = 0;
if (f == NULL)
return 1;
bytes = fprintf(f, "%s", text);
if (bytes != strlen(text))
return 1;
return fclose(f);
}
int main(void)
{
char base_path[PATH_MAX];
char augment_path[PATH_MAX];
char config_base[] =
"[section]\n"
"key1 = first\n"
"key2 = exists\n";
char config_augment[] =
"[section]\n"
"key1 = augment\n"
"key3 = exists\n";
char *builddir;
struct ini_cfgobj *in_cfg, *result_cfg;
struct ini_cfgfile *file_ctx;
uint32_t merge_flags = INI_MS_DETECT | INI_MS_PRESERVE;
int ret;
builddir = getenv("builddir");
if (builddir == NULL) {
builddir = strdup(".");
}
snprintf(base_path, PATH_MAX, "%s/tmp_augment_base.conf", builddir);
snprintf(augment_path, PATH_MAX, "%s/tmp_augment_augment.conf", builddir);
ret = write_to_file(base_path, config_base);
if (ret != 0) {
ret = 1;
goto cleanup;
}
ret = write_to_file(augment_path, config_augment);
if (ret != 0) {
goto cleanup;
}
/* Match only augment.conf */
const char *m_patterns[] = { "^tmp_augment_augment.conf$", NULL };
/* Match all sections */
const char *m_sections[] = { ".*", NULL };
/* Create config collection */
ret = ini_config_create(&in_cfg);
if (ret != EOK)
goto cleanup;
/* Open base.conf */
ret = ini_config_file_open(base_path, 0, &file_ctx);
if (ret != EOK)
goto cleanup;
/* Seed in_cfg with base.conf */
ret = ini_config_parse(file_ctx, 1, 0, 0, in_cfg);
if (ret != EOK)
goto cleanup;
/* Update base.conf with augment.conf */
ret = ini_config_augment(in_cfg,
builddir,
m_patterns,
m_sections,
NULL,
INI_STOP_ON_NONE,
0,
INI_PARSE_NOSPACE|INI_PARSE_NOTAB,
merge_flags,
&result_cfg,
NULL,
NULL);
/* We always expect EEXIST due to DETECT being set. */
if (ret != EEXIST)
goto cleanup;
ret = 0;
cleanup:
remove(base_path);
remove(augment_path);
/* Per autoconf guidelines */
if (ret != 0)
ret = 1;
return ret;
}
]])]
,, [AC_MSG_ERROR(["ini_config library must support extended INI_MS_DETECT. See: https://pagure.io/SSSD/ding-libs/pull-request/3172"])])
AX_PTHREAD(,[AC_MSG_ERROR([Could not find Pthreads support])])
LIBS="$PTHREAD_LIBS $LIBS"
LIBS="$PTHREAD_CFLAGS $CFLAGS"
CC="$PTHREAD_CC"
AC_CHECK_HEADERS([gssapi/gssapi.h],,[AC_MSG_ERROR([Could not find GSSAPI headers])])
PKG_CHECK_MODULES([KRB5_GSSAPI], [krb5-gssapi >= 1.12.0],
[have_krb5_gssapi=1], [have_krb5_gssapi=])
if test x$have_krb5_gssapi = x; then
AC_MSG_ERROR([Could not find Krb5 / GSSAPI development libraries])
else
KRB5_CFLAGS="`$PKG_CONFIG --cflags krb5`"
KRB5_LIBS="`$PKG_CONFIG --libs krb5`"
GSSAPI_CFLAGS="`$PKG_CONFIG --cflags krb5-gssapi`"
GSSAPI_LIBS="`$PKG_CONFIG --libs krb5-gssapi`"
fi
AC_CHECK_LIB(gssapi_krb5, gss_import_cred,,
[AC_MSG_ERROR([GSSAPI library does not support gss_import_cred])],
[$GSSAPI_LIBS])
AC_CHECK_LIB(gssapi_krb5, gss_export_cred,,
[AC_MSG_ERROR([GSSAPI library does not support gss_export_cred])],
[$GSSAPI_LIBS])
AC_CHECK_DECLS([GSS_KRB5_GET_CRED_IMPERSONATOR], [], [],
[[#include <gssapi/gssapi_krb5.h>]])
AC_CHECK_DECLS([GSS_KRB5_CRED_NO_CI_FLAGS_X], [],
[AC_MSG_ERROR([krb5 too old; missing GSS_KRB5_CRED_NO_CI_FLAGS_X (v1.14)])],
[[#include <gssapi/gssapi_krb5.h>]])
AC_SUBST([KRB5_CFLAGS])
AC_SUBST([KRB5_LIBS])
AC_SUBST([GSSAPI_CFLAGS])
AC_SUBST([GSSAPI_LIBS])
AC_CHECK_HEADERS([gssrpc/rpc.h],,[AC_MSG_ERROR([Could not find GSSRPC headers])])
GSSRPC_LIBS="-lgssrpc"
AC_CHECK_LIB(gssrpc, gssrpc_xdrmem_create,,
[AC_MSG_ERROR([Failed to find GSSRPC symbols])],
[$GSSAPI_LIBS $GSSRPC_LIBS])
AC_SUBST([GSSRPC_LIBS])
AC_CHECK_FUNCS([__secure_getenv secure_getenv])
WITH_INITSCRIPT
if test x$initscript = xsystemd; then
WITH_SYSTEMD_UNIT_DIR
fi
if test x$HAVE_MANPAGES != x; then
CHECK_XML_TOOLS
CHECK_STYLESHEET([$SGML_CATALOG_FILES],
[http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
[Docbook XSL templates])
AC_CHECK_PROG([PO4A],[po4a],[po4a],[no])
fi
AM_CONDITIONAL([HAVE_MANPAGES], [test "x$HAVE_MANPAGES" != "x"])
AM_CONDITIONAL([HAVE_PO4A], [test "x$PO4A" != "xno"])
if test x$HAVE_SELINUX != x; then
AM_CHECK_SELINUX
fi
if test x$HAVE_SYSTEMD_UNIT != x; then
AM_CHECK_SYSTEMD
fi
AC_PATH_PROG([DOXYGEN], [doxygen], [false])
AM_CONDITIONAL([HAVE_DOXYGEN], [test x$DOXYGEN != xfalse ])
abs_build_dir=`pwd`
AC_DEFINE_UNQUOTED([ABS_BUILD_DIR], ["$abs_build_dir"], [Absolute path to the build directory])
AC_SUBST([abs_builddir], $abs_build_dir)
AC_CONFIG_FILES([Makefile tests/Makefile man/Makefile
contrib/gssproxy.spec
man/gssproxy-mech.8.xml])
AC_OUTPUT