eid-mw/configure.ac
Wouter Verhelst af7a568624 Update the way of searching for OpenSSL
OpenSSL used to have a "exec_prefix" pkg-config variable that allowed us
to figure out where the "openssl" binary could be found.

As of OpenSSL 3.3, this pkg-config variable no longer exists, so we
can't use it anymore.

Migrate to AC_PATH_PROG to avoid that issue.

While here, remove the "c_rehash" fallback that we used to require for
older distributions, as none of the distributions that require it are
supported anymore.
2024-10-22 10:54:46 +02:00

281 lines
9.2 KiB
Plaintext

AC_PREREQ([2.61])
AC_INIT([eid-mw],
m4_esyscmd_s(scripts/build-aux/genver.sh),
[servicedesk@fedict.be],,
[http://eid.belgium.be])
AC_CONFIG_AUX_DIR([scripts/build-aux])
AC_CONFIG_SRCDIR([cardcomm])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([scripts/m4])
AC_CANONICAL_HOST
AM_SILENT_RULES([yes])
LT_INIT
AM_INIT_AUTOMAKE([subdir-objects foreign tar-pax dist-zip serial-tests])
AM_SILENT_RULES([yes])
# Checks for programs.
AC_PROG_CXX
m4_ifdef([AX_CXX_COMPILE_STDCXX_11],,
[m4_fatal([The m4 macro AX_CXX_COMPILE_STDCXX_11 has not been
defined. Please install the autoconf-archive package.])])
AX_CXX_COMPILE_STDCXX_11()
AC_PROG_CPP
AC_PROG_CC_C99
AC_PROG_LIBTOOL
AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MKDIR_P
PKG_PROG_PKG_CONFIG
AC_CHECK_PROGS(PLANTUML, plantuml)
AM_CONDITIONAL([PLANTUML], [test x$PLANTUML != x])
# Checks for header files.
AC_CHECK_HEADERS([fcntl.h float.h limits.h netinet/in.h stdlib.h string.h sys/file.h sys/ioctl.h sys/time.h unistd.h malloc.h memory.h sys/timeb.h termios.h])
AM_GNU_GETTEXT([external])
AC_ARG_ENABLE([pinentry],AS_HELP_STRING([--disable-pinentry],[When enabled, uses pinentry for dialogs, rather than home-grown dialog boxes (requires libassuan)]),[assuan=$enableval],[assuan=detect])
if test x"$assuan" != x"no"
then
AM_PATH_LIBASSUAN(2,[ASSUAN=y],[ASSUAN=n])
fi
if test x"$assuan" = x"yes" -a x$ASSUAN = x"n"
then
AC_MSG_ERROR([assuan-based dialogs requested, but libassuan could not be found])
fi
AM_CONDITIONAL(ASSUAN,[test x"$ASSUAN" = x"y"])
###### pcsc-lite ##########
PKG_CHECK_MODULES([PCSC],[libpcsclite >= 1.4.4],
[
CPPFLAGS="$PCSC_CFLAGS $CPPFLAGS"
LDFLAGS="$PCSC_LIBS $LDFLAGS"
])
AC_ARG_ENABLE([test-fuzzer],AS_HELP_STRING([--enable-test-fuzzer],[Build a version of eid-mw instrumented for fuzzing (not meant for production use!)]),[fuzzer=$enableval],[fuzzer=no])
AC_MSG_CHECKING([whether to build for fuzzing])
case $fuzzer in
yes|libfuzz)
case $CC in
*clang*)
AC_MSG_RESULT([yes, with libfuzz])
AC_SUBST(FUZZING,["-fsanitize=fuzzer-no-link,address -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION"])
;;
*)
AC_MSG_ERROR([Fuzzing with libfuzz only works with clang. Please set CC to clang version 6.0 or higher])
;;
esac
case $CXX in
*clang++*)
;;
*)
AC_MSG_ERROR([Fuzzing with libfuzz only works with clang. Please set CXX to clang version 6.0 or higher])
;;
esac
;;
afl)
AC_MSG_RESULT([yes, with AFL])
CC=afl-$CC
CXX=afl-$CXX
AC_SUBST(FUZZING,["-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION"])
;;
build)
AC_MSG_RESULT([kinda, build only])
AC_SUBST(FUZZING, ["-DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION"])
;;
*)
fuzzer=no
AC_MSG_RESULT([no])
;;
esac
AM_CONDITIONAL([FUZZING], [test x$fuzzer != xno])
AM_CONDITIONAL([FUZZ_AFL], [test x$fuzzer = xafl])
AC_ARG_WITH([gtkvers],
[AS_HELP_STRING([--with-gtkvers],[select GTK version to use [default: 3 if available, falls back to 4 if not; note that GTK4 support is incomplete]. --without-gtkvers disables GTK altogether [note: this implies --disable-dialogs].])],
[gtkvers=$withval],[gtkvers=detect])
have_gtk=no
AC_MSG_CHECKING([for wanted GTK version])
AC_MSG_RESULT($gtkvers)
if test "$gtkvers" = "detect" -o "$gtkvers" = 3
then
AC_MSG_CHECKING([for gtk3])
PKG_CHECK_MODULES(GTK, [gtk+-3.0], [have_gtk=3], [have_gtk=no])
fi
if test "$have_gtk" = "no"
then
if test "$gtkvers" = "detect" -o "$gtkvers" = 4
then
AC_MSG_CHECKING([for gtk4])
PKG_CHECK_MODULES(GTK, [gtk4], [have_gtk=4],[have_gtk=no])
fi
fi
if test "$have_gtk" = "no"
then
if test "$gtkvers" = 2
then
AC_MSG_ERROR([GTK 2 is no longer supported, sorry])
fi
fi
AC_DEFINE_UNQUOTED([HAVE_GTK], [$have_gtk], [Set to major version of libgtk])
if test "$have_gtk" = "4"
then
if test "$assuan" = "no"
then
AC_MSG_ERROR([The dialogs are not supported on GTK4, please either use GTK3 or switch to pinentry dialogs])
fi
fi
if test "$have_gtk" = "no"
then
if test "$gtkvers" != "no"
then
AC_MSG_ERROR([At least one version of GTK is recommended. If you do not wish the eID viewer or the PIN dialogs, please use --without-gtkvers.])
fi
fi
AM_CONDITIONAL(GTK, [test "$have_gtk" != "no"])
if test "$have_gtk" != "no"
then
PKG_CHECK_MODULES([XML2], [libxml-2.0])
PKG_CHECK_MODULES([libproxy], [libproxy-1.0])
fi
###########################################################################
####### read user-specific requests from --enable directives ######
###########################################################################
AC_MSG_CHECKING(whether to enable dialogs)
default="yes"
if test "$have_gtk" = "no"
then
default=no
fi
NO_DIALOGS=
AC_ARG_ENABLE(dialogs, AS_HELP_STRING([--enable-dialogs],[Turn off dialogs. default: on, unless gtk has been disabled]),, enable_dialogs=$default)
if test "x$enable_dialogs" = "xno"; then
AC_MSG_RESULT(no)
else
if test $have_gtk = no; then
AC_MSG_ERROR([You cannot combine --without-gtkvers and --enable-dialogs, as the dialogs require GTK])
fi
AC_MSG_RESULT(yes)
fi
AM_CONDITIONAL([NO_DIALOGS],[test x$enable_dialogs = xno])
PKG_CHECK_MODULES(GIO, [gio-2.0 >= 2.30],[HAVE_GIO=1],[HAVE_GIO=0])
AC_DEFINE_UNQUOTED([HAVE_GIO], [$HAVE_GIO], [Define to 1 if you have a version of libgio >= 2.30])
if test "$HAVE_GIO" -gt 0; then
GLIB_GSETTINGS
fi
AM_CONDITIONAL(HAVE_GIO, [test "$HAVE_GIO" = 1])
AC_DEFINE(PKCS11_V2_20,[],[Needs to always be defined])
# Checks for typedefs, structures, and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_INT32_T
AC_TYPE_UINT8_T
AC_TYPE_PID_T
# Checks for library functions.
AC_FUNC_ERROR_AT_LINE
AC_FUNC_MALLOC
AC_FUNC_REALLOC
saved_CFLAGS=$CFLAGS
export CFLAGS="$CFLAGS -Wno-error"
AC_CHECK_FUNCS([gethostbyname socket strerror memchr memset mkdir select strchr strdup strerror strncasecmp strrchr strstr strtol strtoul vasprintf],,[AC_MSG_ERROR([missing required function])])
CFLAGS=$saved_CFLAGS
# we only need libjpeg for the test suite, so don't worry if it's not available...
PKG_CHECK_MODULES(JPEG, "libjpeg", [HAVE_JPEGLIB=1], [HAVE_JPEGLIB=0])
AC_CHECK_LIB(jpeg, jpeg_mem_src, [HAVE_JPEGLIB=1; JPEG_LIBS='-ljpeg'], [HAVE_JPEGLIB=0])
AM_CONDITIONAL([JPEG], [test x$HAVE_JPEGLIB = x1])
AC_DEFINE_UNQUOTED([HAVE_JPEGLIB], $HAVE_JPEGLIB, [Define to 1 if you have libjpeg installed])
PKG_CHECK_MODULES(SSL, "openssl", [HAVE_OPENSSL=1])
AC_PATH_PROG(OPENSSL_PATH, openssl)
AC_DEFINE_UNQUOTED([HAVE_OPENSSL], $HAVE_OPENSSL, [Define to 1 if you have OpenSSL installed])
AC_SUBST(OPENSSL_PATH)
PKG_CHECK_MODULES(CURL, "libcurl", [HAVE_CURL=1])
MAINVERSION=$(echo $PACKAGE_VERSION|sed -e 's/-.*$//')
AC_DEFINE_UNQUOTED([MAINVERSION], $MAINVERSION, [do not change this])
AC_SUBST(MAINVERSION)
CRYPTOKIMAJORVERS=$(echo $MAINVERSION|cut -d'.' -f1|sed -e 's/v//')
CRYPTOKIMINORVERS=$(echo $MAINVERSION|cut -d'.' -f2)
PATCHVERS=$(echo $MAINVERSION|cut -d'.' -f3)
AS_IF([test -z "$CRYPTOKIMINORVERS"],[CRYPTOKIMINORVERS=0])
AC_DEFINE_UNQUOTED([CRYPTOKIMAJORVERS], $CRYPTOKIMAJORVERS, [major version of PKCS#11 library])
AC_DEFINE_UNQUOTED([CRYPTOKIMINORVERS], $CRYPTOKIMINORVERS, [minor version of PKCS#11 library])
AC_DEFINE_UNQUOTED([PATCHVERS], $PATCHVERS, [patch version bit of the package])
# need dlopen() for the pincode plugin thing
save_LIBS="$LIBS"
LIBS=""
AC_SEARCH_LIBS([dlopen], [dl],, [AC_MSG_ERROR([I need a dlopen() implementation])])
DL_LIBS="$LIBS"
LIBS="$save_LIBS"
AC_SUBST(DL_LIBS)
p11kitsodir=""
p11kitcfdir=""
PKG_CHECK_MODULES(p11kit, "p11-kit-1", [HAVE_P11KIT=yes], [HAVE_P11KIT=no])
AC_ARG_ENABLE(p11kit, AS_HELP_STRING([--disable-p11kit], [disregard detection result of p11-kit, and do not install support files]), [if test $enableval = no; then HAVE_P11KIT=no; fi])
if test "$HAVE_P11KIT" = yes
then
PKG_CHECK_VAR([p11kitsodir], "p11-kit-1", "p11_module_path",, [HAVE_P11KIT=0])
PKG_CHECK_VAR([p11kit_libdir], "p11-kit-1", "libdir",, [HAVE_P11_KIT=0])
if test ! -z "$p11kit_libdir"; then
p11kitsodir=$(echo $p11kitsodir|sed -e "s,$p11kit_libdir,\${libdir},g")
fi
PKG_CHECK_VAR([p11kitcfdir], "p11-kit-1", "p11_module_configs",, [HAVE_P11KIT=0])
PKG_CHECK_VAR([p11kit_datarootdir], "p11-kit-1", "datarootdir",, [HAVE_P11_KIT=0])
if test ! -z "$p11kit_datarootdir"; then
p11kitcfdir=$(echo $p11kitcfdir|sed -e "s,$p11kit_datarootdir,\${datarootdir},g")
fi
fi
AM_CONDITIONAL([P11KIT], [test "$HAVE_P11KIT" = yes])
pkgconfigdir="\$(libdir)/pkgconfig"
pkcs11hincludedir="\$(includedir)/beid/rsaref220"
AC_SUBST([pkgconfigdir])
AC_SUBST([pkcs11hincludedir])
AC_SUBST([p11kitsodir])
AC_SUBST([p11kitcfdir])
AC_CONFIG_FILES([Makefile
cardcomm/pkcs11/src/Makefile
cardcomm/pkcs11/src/cardlayer/uml/Makefile
cardcomm/pkcs11/src/libbeidpkcs11.pc
cardcomm/pkcs11/src/beidpkcs11.json
cardcomm/pkcs11/src/beidpkcs11_alt.json
cardcomm/pkcs11/src/belgiumeid@eid.belgium.be.json
cardcomm/pkcs11/src/dialogs/dialogsgtk/po/Makefile.in
doc/sdk/include/v240/Makefile
tests/unit/Makefile
tests/fuzz/Makefile
plugins_tools/util/Makefile
plugins_tools/aboutmw/gtk/Makefile
plugins_tools/aboutmw/gtk/po/Makefile.in
plugins_tools/chrome_pkcs11/Makefile
plugins_tools/eid-viewer/Makefile
plugins_tools/eid-viewer/test/Makefile
plugins_tools/eid-viewer/gtk/po/Makefile.in
plugins_tools/eid-viewer/gtk/eid-viewer.desktop.sh
plugins_tools/eid-viewer/uml/Makefile
rpm/eid-mw.spec])
AC_CONFIG_SUBDIRS([plugins_tools/xpi])
AC_OUTPUT