aboutsummaryrefslogtreecommitdiffstats
path: root/lang/cpp/configure.ac
diff options
context:
space:
mode:
Diffstat (limited to 'lang/cpp/configure.ac')
-rw-r--r--lang/cpp/configure.ac464
1 files changed, 464 insertions, 0 deletions
diff --git a/lang/cpp/configure.ac b/lang/cpp/configure.ac
new file mode 100644
index 00000000..9f8414ac
--- /dev/null
+++ b/lang/cpp/configure.ac
@@ -0,0 +1,464 @@
+# configure.ac for GPGME++
+# Copyright (C) 2000 Werner Koch (dd9jn)
+# Copyright (C) 2001-2021, 2024 g10 Code GmbH
+#
+# This file is part of GPGME++.
+#
+# GPGME++ is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation; either version 2.1 of the
+# License, or (at your option) any later version.
+#
+# GPGME++ is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
+# Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, see <https://gnu.org/licenses/>.
+# SPDX-License-Identifier: LGPL-2.1-or-later
+
+# (Process this file with autoconf to produce a configure script.)
+AC_PREREQ([2.69])
+min_automake_version="1.14"
+
+# To build a release you need to create a tag with the version number
+# "gpgmepp-n.m.k" and run "./autogen.sh --force". Please bump the
+# version number immediately after the release and do another commit
+# and push so that the git magic is able to work. If you start a new
+# series by bumping the minor (m) remember to also create a tag named
+# "gpgmepp-n.m-base" as the start point for beta numbering. See below
+# for the LT versions.
+m4_define([mym4_package],[gpgmepp])
+m4_define([mym4_major], [1])
+m4_define([mym4_minor], [24])
+m4_define([mym4_micro], [0])
+
+# Below is m4 magic to extract and compute the git revision number,
+# the decimalized short revision number, a beta version string and a
+# flag indicating a development version (mym4_isbeta). Note that the
+# m4 processing is done by autoconf and not during the configure run.
+m4_define([mym4_verslist], m4_split(m4_esyscmd([./autogen.sh --find-version] \
+ mym4_package mym4_major mym4_minor mym4_micro),[:]))
+m4_define([mym4_isbeta], m4_argn(2, mym4_verslist))
+m4_define([mym4_version], m4_argn(4, mym4_verslist))
+m4_define([mym4_revision], m4_argn(7, mym4_verslist))
+m4_define([mym4_revision_dec], m4_argn(8, mym4_verslist))
+m4_esyscmd([echo ]mym4_version[>VERSION])
+AC_INIT([mym4_package],[mym4_version],[https://bugs.gnupg.org])
+
+# LT Version numbers, remember to change them just *before* a release.
+# (Code changed: REVISION++)
+# (Interfaces added/removed/changed: CURRENT++, REVISION=0)
+# (Interfaces added: AGE++)
+# (Interfaces removed: AGE=0)
+#
+# If there is an ABI break in gpgmepp also bump the version in
+# IMPORTED_LOCATION in the GpgmeppConfig-w32.cmake.in.in
+LIBGPGMEPP_LT_CURRENT=26
+LIBGPGMEPP_LT_AGE=20
+LIBGPGMEPP_LT_REVISION=1
+################################################
+
+AC_SUBST(LIBGPGMEPP_LT_CURRENT)
+AC_SUBST(LIBGPGMEPP_LT_AGE)
+AC_SUBST(LIBGPGMEPP_LT_REVISION)
+
+##############################################
+
+NEED_GPG_ERROR_VERSION=1.47
+
+# We need GpgME matching the minor version of GpgME++
+NEED_GPGME_VERSION=mym4_major.mym4_minor.0
+
+VERSION_MAJOR=mym4_major
+VERSION_MINOR=mym4_minor
+VERSION_MICRO=mym4_micro
+
+AC_CONFIG_AUX_DIR([build-aux])
+AC_CONFIG_MACRO_DIR([m4])
+AM_INIT_AUTOMAKE([serial-tests dist-bzip2 no-dist-gzip])
+AM_MAINTAINER_MODE
+AC_CANONICAL_HOST
+AM_SILENT_RULES
+AC_ARG_VAR(SYSROOT,[locate config scripts also below that directory])
+
+# Enable GNU extensions on systems that have them.
+AC_USE_SYSTEM_EXTENSIONS
+
+# Taken from mpfr-4.0.1, then modified for LDADD_FOR_TESTS_KLUDGE
+dnl Under Linux, make sure that the old dtags are used if LD_LIBRARY_PATH
+dnl is defined. The issue is that with the new dtags, LD_LIBRARY_PATH has
+dnl the precedence over the run path, so that if a compatible MPFR library
+dnl is installed in some directory from $LD_LIBRARY_PATH, then the tested
+dnl MPFR library will be this library instead of the MPFR library from the
+dnl build tree. Other OS with the same issue might be added later.
+dnl
+dnl References:
+dnl https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=859732
+dnl http://lists.gnu.org/archive/html/libtool/2017-05/msg00000.html
+dnl
+dnl We need to check whether --disable-new-dtags is supported as alternate
+dnl linkers may be used (e.g., with tcc: CC=tcc LD=tcc).
+dnl
+case $host in
+ *-*-linux*)
+ if test -n "$LD_LIBRARY_PATH"; then
+ saved_LDFLAGS="$LDFLAGS"
+ LDADD_FOR_TESTS_KLUDGE="-Wl,--disable-new-dtags"
+ LDFLAGS="$LDFLAGS $LDADD_FOR_TESTS_KLUDGE"
+ AC_MSG_CHECKING(whether --disable-new-dtags is supported by the linker)
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+int main (void) { return 0; }
+ ]])],
+ [AC_MSG_RESULT(yes (use it since LD_LIBRARY_PATH is set))],
+ [AC_MSG_RESULT(no)
+ LDADD_FOR_TESTS_KLUDGE=""
+ ])
+ LDFLAGS="$saved_LDFLAGS"
+ fi
+ ;;
+esac
+AC_SUBST([LDADD_FOR_TESTS_KLUDGE])
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_CXX
+
+# Note: A suitable gitlog-to-changelog script can be found in GnuPG master.
+AC_CHECK_PROGS(GITLOG_TO_CHANGELOG, gitlog-to-changelog, [gitlog-to-changelog])
+
+AC_SUBST(VERSION_MAJOR)
+AC_SUBST(VERSION_MINOR)
+AC_SUBST(VERSION_MICRO)
+
+VERSION_NUMBER=m4_esyscmd(printf "0x%02x%02x%02x" mym4_major \
+ mym4_minor mym4_micro)
+AC_SUBST(VERSION_NUMBER)
+
+# We need to compile and run a program on the build machine. A
+# comment in libgpg-error says that the AC_PROG_CC_FOR_BUILD macro in
+# the AC archive is broken for autoconf 2.57. Given that there is no
+# newer version of that macro, we assume that it is also broken for
+# autoconf 2.61 and thus we use a simple but usually sufficient
+# approach.
+AC_MSG_CHECKING(for cc for build)
+if test "$cross_compiling" = "yes"; then
+ CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
+else
+ CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
+fi
+AC_MSG_RESULT($CC_FOR_BUILD)
+AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
+
+
+# Don't default to build static libs.
+LT_PREREQ([2.2.6])
+LT_INIT([win32-dll disable-static])
+LT_LANG([Windows Resource])
+
+# For now we hardcode the use of version scripts. It would be better
+# to write a test for this or even implement this within libtool.
+have_ld_version_script=no
+case "${host}" in
+ *-*-linux*)
+ have_ld_version_script=yes
+ ;;
+ *-*-gnu*)
+ have_ld_version_script=yes
+ ;;
+ *-apple-darwin*)
+ AC_DEFINE(_DARWIN_C_SOURCE, 1,
+ Expose all libc features (__DARWIN_C_FULL).)
+ AC_DEFINE(_XOPEN_SOURCE, 500, Activate POSIX interface on MacOS X)
+ ;;
+esac
+
+AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
+
+#
+# Specify how we support our local modification of libtool for Windows
+# 64-bit. Options are:
+#
+# (1) apply: when appying patch fails, it results failure of entire build
+# (2) never: never apply the patch (no try)
+# (3) try: use patched if it goes well, use original if fails
+#
+AC_ARG_WITH([libtool-modification],
+ AS_HELP_STRING([--with-libtool-modification=apply|never|try],
+ [how to handle libtool modification (default=never)]),
+ build_libtool_modification=$withval,
+ build_libtool_modification=never)
+
+#
+# Apply a patch (locally maintained one of ours) to libtool
+#
+case $host in
+ x86_64-*mingw32*)
+AC_CONFIG_COMMANDS([libtool-patch],[[
+ if test "$build_selection" = never; then
+ echo "patch not applied"
+ elif (mv -f libtool libtool.orig; \
+ sed -f $srcdir/build-aux/libtool-patch.sed libtool.orig >libtool); then
+ echo "applied successfully"
+ elif test "$build_selection" = try; then
+ mv -f libtool.orig libtool
+ echo "patch failed, thus, using original"
+ else
+ echo "patch failed"
+ as_fn_exit 1
+ fi
+]],[build_selection=$build_libtool_modification])
+ ;;
+ *)
+ ;;
+esac
+
+GPG_DEFAULT=no
+GPGSM_DEFAULT=no
+GPGCONF_DEFAULT=no
+G13_DEFAULT=no
+component_system=None
+have_dosish_system=no
+have_android_system=no
+have_w32_system=no
+have_w64_system=no
+have_macos_system=no
+case "${host}" in
+ x86_64-*mingw32*)
+ have_w64_system=yes
+ ;;
+ *-linux-androideabi)
+ have_android_system=yes
+ ;;
+ *-apple-darwin*)
+ have_macos_system=yes
+ ;;
+esac
+case "${host}" in
+ *-mingw32*)
+ have_dosish_system=yes
+ have_w32_system=yes
+ GPG_DEFAULT='c:\\gnupg\\gpg.exe'
+ GPGSM_DEFAULT='c:\\gnupg\\gpgsm.exe'
+ GPGCONF_DEFAULT='c:\\gnupg\\gpgconf.exe'
+ G13_DEFAULT='c:\\gnupg\\g13.exe'
+ #component_system='COM+'
+ ;;
+ *)
+
+ # XXX: Probably use exec-prefix here?
+# GPG_DEFAULT='/usr/bin/gpg'
+# GPGSM_DEFAULT='/usr/bin/gpgsm'
+# GPGCONF_DEFAULT='/usr/bin/gpgconf'
+# G13_DEFAULT='/usr/bin/g13'
+ ;;
+esac
+
+if test "$have_dosish_system" = yes; then
+ AC_DEFINE(HAVE_DOSISH_SYSTEM,1,
+ [Defined if we run on some of the PCDOS like systems
+ (DOS, Windoze. OS/2) with special properties like
+ no file modes])
+fi
+AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes)
+
+if test "$have_w32_system" = yes; then
+ AC_DEFINE(HAVE_W32_SYSTEM,1,
+ [Defined if we run on any kind of W32 API based system])
+fi
+AM_CONDITIONAL(HAVE_W32_SYSTEM, test "$have_w32_system" = yes)
+
+if test "$have_w64_system" = yes; then
+ AC_DEFINE(HAVE_W64_SYSTEM,1,
+ [Defined if we run on a 64 bit W32 API based system])
+fi
+AM_CONDITIONAL(HAVE_W64_SYSTEM, test "$have_w64_system" = yes)
+
+if test "$have_android_system" = yes; then
+ AC_DEFINE(HAVE_ANDROID_SYSTEM,1, [Defined if we build for an Android system])
+fi
+AM_CONDITIONAL(HAVE_ANDROID_SYSTEM, test "$have_android_system" = yes)
+
+if test "$have_macos_system" = yes; then
+ AC_DEFINE(HAVE_MACOS_SYSTEM,1,
+ [Defined if we build for an MacOS system])
+fi
+AM_CONDITIONAL(HAVE_MACOS_SYSTEM, test "$have_macos_system" = yes)
+
+
+# Require C++ 11
+AX_CXX_COMPILE_STDCXX(11, noext, optional)
+if test "$HAVE_CXX11" != "1"; then
+ AC_MSG_ERROR([[
+***
+*** A compiler with c++11 support is required for the C++ binding.
+***]])
+fi
+
+# Check whether compiler supports visibility attribute
+AX_GCC_FUNC_ATTRIBUTE(visibility)
+if test "$ax_cv_have_func_attribute_visibility" = "yes"; then
+ GPGMEPP_CFLAGS="$GPGMEPP_CFLAGS -fvisibility=hidden"
+fi
+AC_SUBST(GPGMEPP_CFLAGS)
+
+#
+# Provide information about the build.
+#
+BUILD_REVISION="mym4_revision"
+AC_SUBST(BUILD_REVISION)
+AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
+ [GIT commit id revision used to build this package])
+
+
+#
+# Options to disable some regression tests
+#
+run_tests="yes"
+AC_ARG_ENABLE(tests,
+ AS_HELP_STRING([--disable-tests], [disable regression tests]),
+ run_tests=$enableval)
+AM_CONDITIONAL(RUN_GPG_TESTS, test "$run_tests" = "yes")
+
+
+# Checks for header files.
+AC_CHECK_HEADERS_ONCE([unistd.h])
+
+
+# Type checks.
+AC_CHECK_SIZEOF(unsigned int)
+AC_SYS_LARGEFILE
+
+
+# Checks for compiler features.
+if test "$GCC" = yes; then
+ if test "$USE_MAINTAINER_MODE" = "yes"; then
+ CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wno-shadow"
+ fi
+fi
+
+
+# Checks for library functions.
+AC_MSG_NOTICE([checking for libraries])
+
+# Checking for libgpg-error.
+have_gpg_error=no
+AM_PATH_GPG_ERROR("$NEED_GPG_ERROR_VERSION",
+ have_gpg_error=yes, have_gpg_error=no)
+AC_DEFINE(GPG_ERR_SOURCE_DEFAULT, GPG_ERR_SOURCE_GPGME,
+ [The default error source for GPGME.])
+
+AM_CONDITIONAL(USE_GPGRT_CONFIG, [test -n "$GPGRT_CONFIG" \
+ -a "$ac_cv_path_GPG_ERROR_CONFIG" = no])
+
+# And for gpgme.
+have_gpgme=no
+AM_PATH_GPGME("$NEED_GPGME_VERSION",
+ have_gpgme=yes, have_gpgme=no)
+
+
+# Substitution used for gpgmepp.pc
+GPGMEPP_PKGCONFIG_LIBS="-lgpgmepp"
+GPGMEPP_PKGCONFIG_CFLAGS=""
+GPGMEPP_PKGCONFIG_HOST="$host"
+
+case "$includedir" in
+ /usr/include|/include) ;;
+ '${prefix}/include')
+ if test "$prefix" != / -a "$prefix" != /usr; then
+ if test -z "$GPGMEPP_PKGCONFIG_CFLAGS"; then
+ GPGMEPP_PKGCONFIG_CFLAGS="-I\${includedir}"
+ else
+ GPGMEPP_PKGCONFIG_CFLAGS="-I\${includedir} $GPGMEPP_PKGCONFIG_CFLAGS"
+ fi
+ fi
+ ;;
+ *)
+ if test -z "$GPGMEPP_PKGCONFIG_CFLAGS"; then
+ GPGMEPP_PKGCONFIG_CFLAGS="-I\${includedir}"
+ else
+ GPGMEPP_PKGCONFIG_CFLAGS="-I\${includedir} $GPGMEPP_PKGCONFIG_CFLAGS"
+ fi
+ ;;
+esac
+case "$libdir" in
+ /usr/lib|/usr/lib64|/lib|/lib64) ;;
+ '${exec_prefix}/lib'|'${exec_prefix}/lib64')
+ if test "$exec_prefix" = "NONE"; then
+ if test "$prefix" != / -a "$prefix" != /usr; then
+ GPGMEPP_PKGCONFIG_LIBS="-L\${libdir} $GPGMEPP_PKGCONFIG_LIBS"
+ fi
+ elif test "$exec_prefix" != / -a "$exec_prefix" != /usr; then
+ GPGMEPP_PKGCONFIG_LIBS="-L\${libdir} $GPGMEPP_PKGCONFIG_LIBS"
+ fi
+ ;;
+ *)
+ GPGMEPP_PKGCONFIG_LIBS="-L\${libdir} $GPGMEPP_PKGCONFIG_LIBS"
+ ;;
+esac
+
+AC_SUBST(GPGMEPP_PKGCONFIG_LIBS)
+AC_SUBST(GPGMEPP_PKGCONFIG_CFLAGS)
+AC_SUBST(GPGMEPP_PKGCONFIG_HOST)
+
+
+# Last check.
+die=no
+if test "$have_gpg_error" = "no"; then
+ die=yes
+ AC_MSG_NOTICE([[
+***
+*** You need libgpg-error to build this program.
+** This library is for example available at
+*** https://www.gnupg.org/ftp/gcrypt/libgpg-error/
+*** (at least version $NEED_GPG_ERROR_VERSION is required.)
+***]])
+fi
+if test "$have_gpgme" = "no"; then
+ die=yes
+ AC_MSG_NOTICE([[
+***
+*** You need gpgme to build this program.
+*** This library is for example available at
+*** https://www.gnupg.org/ftp/gcrypt/gpgme/
+*** (at least version $NEED_GPGME_VERSION is required).
+***]])
+fi
+
+if test "$die" = "yes"; then
+ AC_MSG_ERROR([[
+***
+*** Required libraries not found. Please consult the above messages
+*** and install them before running configure again.
+***]])
+fi
+
+
+#
+# Create config files
+
+AC_CONFIG_FILES(Makefile src/Makefile)
+AC_CONFIG_FILES(tests/Makefile)
+AC_CONFIG_FILES(src/gpgmepp.pc)
+AC_CONFIG_FILES(src/GpgmeppConfig-w32.cmake.in)
+AC_CONFIG_FILES(src/GpgmeppConfig.cmake.in)
+AC_CONFIG_FILES(src/GpgmeppConfigVersion.cmake)
+AC_CONFIG_FILES(src/gpgmepp_version.h)
+AC_OUTPUT
+
+echo "
+ GpgME++ v${VERSION} has been configured as follows:
+
+ Revision: mym4_revision (mym4_revision_dec)
+ Platform: $host
+"
+if test "x${gpg_config_script_warn}" != x; then
+cat <<G10EOF
+ Mismatches between the target platform and the to
+ be used libraries have been been detected for:
+ ${gpg_config_script_warn}
+ Please check above for warning messages.
+
+G10EOF
+fi