core: Minor cleanup of commit 195c735
[gpgme.git] / configure.ac
index 5aad9f4..9903751 100644 (file)
@@ -16,7 +16,7 @@
 # Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 
 # (Process this file with autoconf to produce a configure script.)
 AC_PREREQ(2.59)
@@ -28,7 +28,7 @@ min_automake_version="1.14"
 # commit and push so that the git magic is able to work.  See below
 # for the LT versions.
 m4_define(mym4_version_major, [1])
-m4_define(mym4_version_minor, [6])
+m4_define(mym4_version_minor, [8])
 m4_define(mym4_version_micro, [1])
 
 # Below is m4 magic to extract and compute the revision number, the
@@ -55,21 +55,26 @@ AC_INIT([gpgme],[mym4_full_version],[http://bugs.gnupg.org])
 #   (Interfaces added:                 AGE++)
 #   (Interfaces removed/changed:       AGE=0)
 #
-LIBGPGME_LT_CURRENT=25
-# Subtract 2 from this value if you want to make the LFS transition an
-# ABI break.  [Note to self: Remove this comment with the next regular break.]
-LIBGPGME_LT_AGE=14
+LIBGPGME_LT_CURRENT=28
+LIBGPGME_LT_AGE=17
 LIBGPGME_LT_REVISION=0
 
-LIBGPGMEPP_LT_CURRENT=3
-LIBGPGMEPP_LT_AGE=0
+# If there is an ABI break in gpgmepp or qgpgme also bump the
+# version in IMPORTED_LOCATION in the GpgmeppConfig-w32.cmake.in.in
+
+LIBGPGMEPP_LT_CURRENT=9
+LIBGPGMEPP_LT_AGE=3
 LIBGPGMEPP_LT_REVISION=0
 
+LIBQGPGME_LT_CURRENT=8
+LIBQGPGME_LT_AGE=1
+LIBQGPGME_LT_REVISION=0
+
 # If the API is changed in an incompatible way: increment the next counter.
 GPGME_CONFIG_API_VERSION=1
 ##############################################
 
-NEED_GPG_ERROR_VERSION=1.11
+NEED_GPG_ERROR_VERSION=1.17
 NEED_LIBASSUAN_API=2
 NEED_LIBASSUAN_VERSION=2.0.2
 
@@ -77,6 +82,10 @@ NEED_LIBASSUAN_VERSION=2.0.2
 PACKAGE=$PACKAGE_NAME
 VERSION=$PACKAGE_VERSION
 
+VERSION_MAJOR=mym4_version_major
+VERSION_MINOR=mym4_version_minor
+VERSION_MICRO=mym4_version_micro
+
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR(src/gpgme.h.in)
@@ -111,15 +120,37 @@ AC_SUBST(LIBGPGME_LT_REVISION)
 AC_SUBST(LIBGPGMEPP_LT_CURRENT)
 AC_SUBST(LIBGPGMEPP_LT_AGE)
 AC_SUBST(LIBGPGMEPP_LT_REVISION)
+AC_SUBST(LIBQGPGME_LT_CURRENT)
+AC_SUBST(LIBQGPGME_LT_AGE)
+AC_SUBST(LIBQGPGME_LT_REVISION)
 
 AC_SUBST(PACKAGE)
 AC_SUBST(VERSION)
+AC_SUBST(VERSION_MAJOR)
+AC_SUBST(VERSION_MINOR)
+AC_SUBST(VERSION_MICRO)
 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of this package])
 AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version of this package])
 VERSION_NUMBER=m4_esyscmd(printf "0x%02x%02x%02x" mym4_version_major \
                           mym4_version_minor mym4_version_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])
@@ -151,10 +182,11 @@ have_dosish_system=no
 have_android_system=no
 have_w32_system=no
 have_w64_system=no
+have_macos_system=no
 build_w32_glib=no
 build_w32_qt=no
-available_languages="cpp cl"
-default_languages="cpp cl"
+available_languages="cl cpp python python2 python3 qt"
+default_languages="cl cpp python qt"
 case "${host}" in
     x86_64-*mingw32*)
         have_w64_system=yes
@@ -165,6 +197,9 @@ case "${host}" in
     *-linux-androideabi)
         have_android_system=yes
         ;;
+    *-apple-darwin*)
+        have_macos_system=yes
+        ;;
 esac
 case "${host}" in
     *-mingw32ce*|*-mingw32*)
@@ -180,24 +215,8 @@ case "${host}" in
        AC_ARG_ENABLE(w32-glib,
            AC_HELP_STRING([--enable-w32-glib], [build GPGME Glib for W32]),
                           build_w32_glib=$enableval)
-
-       # Check disabled, because the qt-dev packages in gpg4win do
-       # not provide any support for cross compilation.
-       # PKG_CHECK_MODULES(QT4_CORE, QtCore)
-
-       # Use it like this:
-       # ./configure --enable-w32-qt QT4_CORE_CFLAGS="..." QT4_CORE_LIBS="..."
-       AC_SUBST(QT4_CORE_CFLAGS)
-       AC_SUBST(QT4_CORE_LIBS)
-       AC_ARG_ENABLE(w32-qt,
-           AC_HELP_STRING([--enable-w32-qt], [build GPGME Qt for W32]),
-                          build_w32_qt=$enableval)
-        ;;
+       ;;
     *)
-       AC_CHECK_LIB(pthread,pthread_create,have_pthread=yes)
-       if test "$have_pthread" = yes; then
-         AC_DEFINE(HAVE_PTHREAD, ,[Define if we have pthread.])
-       fi
 
        # XXX: Probably use exec-prefix here?
 #      GPG_DEFAULT='/usr/bin/gpg'
@@ -238,10 +257,13 @@ if test "$have_android_system" = yes; then
 fi
 AM_CONDITIONAL(HAVE_ANDROID_SYSTEM, test "$have_android_system" = yes)
 
-AM_CONDITIONAL(BUILD_W32_GLIB, test "$build_w32_glib" = yes)
-AM_CONDITIONAL(BUILD_W32_QT, test "$build_w32_qt" = 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)
 
-AM_CONDITIONAL(HAVE_PTHREAD, test "$have_pthread" = "yes")
+AM_CONDITIONAL(BUILD_W32_GLIB, test "$build_w32_glib" = yes)
 
 
 AC_ARG_ENABLE([fixed-path],
@@ -254,23 +276,196 @@ if test x$fixed_search_path != x ; then
                     [Locate binaries only via this PATH])
 fi
 
+
+# Note: You need to declare all possible langauges also in
+#       lang/Makefile.am's DIST_SUBDIRS.
 AC_ARG_ENABLE([languages],
               AC_HELP_STRING([--enable-languages=languages],
                              [enable only specific language bindings]),
                              [enabled_languages=`echo $enableval | \
                              tr ',:' '  ' | tr '[A-Z]' '[a-z]' | \
                              sed 's/c++/cpp/'`],
-                             [enabled_languages="$default_languages"])
+                             [enabled_languages="maybe"])
 if test "x$enabled_languages" = "x" \
    -o "$enabled_languages" = "no"; then
    enabled_languages=
 fi
+
+# If languages are explicitly set missing requirements
+# for the languages are treated as errors otherwise
+# there will be a warning.
+explicit_languages=1
+if test "x$enabled_languages" = "xmaybe"; then
+    explicit_languages=0
+    enabled_languages="$default_languages"
+fi
+
 for language in $enabled_languages; do
     LIST_MEMBER($language, $available_languages)
     if test "$found" = "0"; then
        AC_MSG_ERROR([unsupported language binding specified])
     fi
 done
+
+
+
+# Enable C++ 11 if cpp language is requested
+LIST_MEMBER("cpp", $enabled_languages)
+if test "$found" = "1"; then
+    AX_CXX_COMPILE_STDCXX(11, noext, optional)
+    if test "$HAVE_CXX11" != "1"; then
+        if test "$explicit_languages" = "1"; then
+            AC_MSG_ERROR([[
+***
+*** A compiler with c++11 support is required for the c++ binding.
+***]])
+        else
+            enabled_languages=$(echo $enabled_languages | sed 's/cpp//')
+            enabled_languages=$(echo $enabled_languages | sed 's/qt//')
+            AC_MSG_WARN([[
+***
+*** No c++11 support detected. C++ and Qt bindings will be disabled.
+***]])
+        fi
+    fi
+fi
+
+# Check that if qt is enabled cpp also is enabled
+LIST_MEMBER("qt", $enabled_languages)
+if test "$found" = "1"; then
+    # We need to ensure that in the langauge order qt comes after cpp
+    # so we remove qt first and explicitly add it as last list member.
+    enabled_languages=$(echo $enabled_languages | sed 's/qt//')
+    LIST_MEMBER("cpp", $enabled_languages)
+    if test "$found" = "0"; then
+        AC_MSG_ERROR([[
+***
+*** Qt language binding depends on cpp binding.
+***]])
+    fi
+    FIND_QT
+    if test "$have_qt5_libs" != "yes"; then
+        if test "$explicit_languages" = "1"; then
+        AC_MSG_ERROR([[
+***
+*** Qt5 (Qt5Core) is required for Qt binding.
+***]])
+        else
+           AC_MSG_WARN([[
+***
+*** Qt5 (Qt5Core) not found Qt Binding will be disabled.
+***]])
+        fi
+    else
+        enabled_languages=`echo $enabled_languages qt`
+
+        AC_CHECK_PROGS([DOXYGEN], [doxygen])
+        if test -z "$DOXYGEN";
+            # This is not highlighted becase it's not really important.
+            then AC_MSG_WARN([Doxygen not found - Qt binding doc will not be built.])
+        fi
+        AC_CHECK_PROGS([GRAPHVIZ], [dot])
+        if test -z "$GRAPHVIZ";
+            then AC_MSG_WARN([Graphviz not found - Qt binding doc will not have diagrams.])
+        fi
+    fi
+fi
+AM_CONDITIONAL([HAVE_DOXYGEN],
+               [test -n "$DOXYGEN"])
+if test -n "$GRAPHVIZ"; then
+    HAVE_DOT="YES"
+else
+    HAVE_DOT="NO"
+fi
+AC_SUBST(HAVE_DOT)
+
+# Python bindings.
+LIST_MEMBER("python2", $enabled_languages)
+found_py2=$found
+LIST_MEMBER("python3", $enabled_languages)
+found_py3=$found
+LIST_MEMBER("python", $enabled_languages)
+found_py=$found
+if test "$found_py" = "1" -o "$found_py2" = "1" -o "$found_py3" = "1"; then
+    AX_PKG_SWIG
+    if test -z "$SWIG"; then
+        if test "$explicit_languages" = "1"; then
+            AC_MSG_ERROR([[
+***
+*** You need SWIG to build the Python bindings.
+***]])
+        else
+            enabled_languages=$(echo $enabled_languages | sed 's/python//')
+        fi
+    else
+        # Reset all the stuff, just to be sure.
+       PYTHONS=
+       PYTHON_VERSIONS=
+       unset PYTHON
+       unset PYTHON_VERSION
+       unset PYTHON_CPPFLAGS
+       unset PYTHON_LDFLAGS
+       unset PYTHON_SITE_PKG
+       unset PYTHON_EXTRA_LIBS
+       unset PYTHON_EXTRA_LDFLAGS
+       unset ac_cv_path_PYTHON
+       unset am_cv_pathless_PYTHON
+       unset am_cv_python_version
+       unset am_cv_python_platform
+       unset am_cv_python_pythondir
+       unset am_cv_python_pyexecdir
+
+       if test "$found_py" = "1" -o "$found_py2" = "1"; then
+           AM_PATH_PYTHON([2.7])
+           AX_PYTHON_DEVEL
+           if test "$PYTHON_VERSION"; then
+               PYTHONS="$(echo $PYTHONS $PYTHON)"
+               PYTHON_VERSIONS="$(echo $PYTHON_VERSIONS $PYTHON_VERSION)"
+           fi
+       fi
+
+       if test "$found_py" = "1" -o "$found_py3" = "1"; then
+           # Reset everything, so that we can look for another Python.
+           unset PYTHON
+           unset PYTHON_VERSION
+           unset PYTHON_CPPFLAGS
+           unset PYTHON_LDFLAGS
+           unset PYTHON_SITE_PKG
+           unset PYTHON_EXTRA_LIBS
+           unset PYTHON_EXTRA_LDFLAGS
+           unset ac_cv_path_PYTHON
+           unset am_cv_pathless_PYTHON
+           unset am_cv_python_version
+           unset am_cv_python_platform
+           unset am_cv_python_pythondir
+           unset am_cv_python_pyexecdir
+           AM_PATH_PYTHON([3.4])
+           AX_PYTHON_DEVEL
+           if test "$PYTHON_VERSION"; then
+               PYTHONS="$(echo $PYTHONS $PYTHON)"
+               PYTHON_VERSIONS="$(echo $PYTHON_VERSIONS $PYTHON_VERSION)"
+           fi
+       fi
+
+       if test "$PYTHON_VERSIONS"; then
+          enabled_languages_v=$(echo $enabled_languages | sed "s/python\([[23]]\)\?/python ($PYTHON_VERSIONS)/")
+          enabled_languages=$(echo $enabled_languages | sed "s/python\([[23]]\)\?/python/")
+       else
+            if test "$explicit_languages" = "1"; then
+                AC_MSG_ERROR([[
+***
+*** Please install the python development packages.
+***]])
+           else
+                enabled_languages=$(echo $enabled_languages | sed 's/python//')
+            fi
+       fi
+
+       AC_SUBST(PYTHONS, $PYTHONS)
+       AC_SUBST(PYTHON_VERSIONS, $PYTHON_VERSIONS)
+    fi
+fi
+
 AC_SUBST(ENABLED_LANGUAGES, $enabled_languages)
 
 #
@@ -386,6 +581,36 @@ AM_SUBST_NOTMAKE(API__SSIZE_T)
 # Checks for compiler features.
 if test "$GCC" = yes; then
     CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes"
+    if test "$USE_MAINTAINER_MODE" = "yes"; then
+        CFLAGS="$CFLAGS -Wformat -Wno-format-y2k -Wformat-security"
+
+        # If -Wno-missing-field-initializers is supported we can enable a
+        # a bunch of really useful warnings.
+        AC_MSG_CHECKING([if gcc supports -Wno-missing-field-initializers])
+        _gcc_cflags_save=$CFLAGS
+        CFLAGS="-Wno-missing-field-initializers"
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
+        AC_MSG_RESULT($_gcc_wopt)
+        CFLAGS=$_gcc_cflags_save;
+        if test x"$_gcc_wopt" = xyes ; then
+          CFLAGS="$CFLAGS -W -Wextra -Wbad-function-cast"
+          CFLAGS="$CFLAGS -Wwrite-strings"
+          CFLAGS="$CFLAGS -Wdeclaration-after-statement"
+          CFLAGS="$CFLAGS -Wno-missing-field-initializers"
+          CFLAGS="$CFLAGS -Wno-sign-compare"
+        fi
+        CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wno-shadow"
+
+        AC_MSG_CHECKING([if gcc supports -Wpointer-arith])
+        _gcc_cflags_save=$CFLAGS
+        CFLAGS="-Wpointer-arith"
+        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[])],_gcc_wopt=yes,_gcc_wopt=no)
+        AC_MSG_RESULT($_gcc_wopt)
+        CFLAGS=$_gcc_cflags_save;
+        if test x"$_gcc_wopt" = xyes ; then
+          CFLAGS="$CFLAGS -Wpointer-arith"
+        fi
+    fi
     if test "$have_w32_system" = yes; then
        CFLAGS="$CFLAGS -mms-bitfields"
     fi
@@ -407,11 +632,6 @@ AC_MSG_NOTICE([checking for libraries])
 
 AC_FUNC_FSEEKO
 
-AC_REPLACE_FUNCS(vasprintf)
-if test "$ac_cv_func_vasprintf" != yes; then
-  GNUPG_CHECK_VA_COPY
-fi
-
 # Try to find a thread-safe version of ttyname().
 gnupg_REPLACE_TTYNAME_R
 if test "$ac_cv_func_ttyname_r" != yes; then
@@ -473,21 +693,6 @@ fi
 # Other checks
 #
 
-# Check for funopen
-AC_CHECK_FUNCS(funopen)
-if test $ac_cv_func_funopen != yes; then
-    # No funopen but we can implement that in terms of fopencookie.
-    AC_CHECK_FUNCS(fopencookie)
-    if test $ac_cv_func_fopencookie = yes; then
-        AC_REPLACE_FUNCS(funopen)
-    else
-        AC_MSG_WARN([
-***
-*** No implementation of fopencookie or funopen available
-***])
-    fi
-fi
-
 # Check for getgid etc
 AC_CHECK_FUNCS(getgid getegid)
 
@@ -583,7 +788,7 @@ AH_BOTTOM([
 #define GPG_ERR_ENABLE_ERRNO_MACROS 1
 
 #define CRIGHTBLURB "Copyright (C) 2000 Werner Koch\n" \
-                    "Copyright (C) 2001--2015 g10 Code GmbH\n"
+                    "Copyright (C) 2001--2016 g10 Code GmbH\n"
 ])
 
 
@@ -591,10 +796,12 @@ AH_BOTTOM([
 GPGME_CONFIG_LIBS="-lgpgme"
 GPGME_CONFIG_CFLAGS=""
 GPGME_CONFIG_HOST="$host"
+GPGME_CONFIG_AVAIL_LANG="$enabled_languages"
 AC_SUBST(GPGME_CONFIG_API_VERSION)
 AC_SUBST(GPGME_CONFIG_LIBS)
 AC_SUBST(GPGME_CONFIG_CFLAGS)
 AC_SUBST(GPGME_CONFIG_HOST)
+AC_SUBST(GPGME_CONFIG_AVAIL_LANG)
 
 # Frob'da Variables
 LTLIBOBJS=`echo "$LIB@&t@OBJS" |
@@ -614,7 +821,6 @@ AC_SUBST(emacs_local_vars_begin, [['Local][ ][Variables:']])
 AC_SUBST(emacs_local_vars_read_only, ['buffer-read-only: t'])
 AC_SUBST(emacs_local_vars_end, ['End:'])
 
-
 # Last check.
 die=no
 if test "$have_gpg_error" = "no"; then
@@ -660,9 +866,23 @@ AC_CONFIG_FILES(Makefile src/Makefile
                 src/gpgme.h)
 AC_CONFIG_FILES(src/gpgme-config, chmod +x src/gpgme-config)
 AC_CONFIG_FILES(lang/cpp/Makefile lang/cpp/src/Makefile)
+AC_CONFIG_FILES(lang/cpp/src/GpgmeppConfig-w32.cmake.in)
 AC_CONFIG_FILES(lang/cpp/src/GpgmeppConfig.cmake.in)
 AC_CONFIG_FILES(lang/cpp/src/GpgmeppConfigVersion.cmake)
+AC_CONFIG_FILES(lang/cpp/src/gpgmepp_version.h)
+AC_CONFIG_FILES(lang/qt/Makefile lang/qt/src/Makefile)
+AC_CONFIG_FILES(lang/qt/src/QGpgmeConfig-w32.cmake.in)
+AC_CONFIG_FILES(lang/qt/src/QGpgmeConfig.cmake.in)
+AC_CONFIG_FILES(lang/qt/src/QGpgmeConfigVersion.cmake)
+AC_CONFIG_FILES(lang/qt/tests/Makefile)
+AC_CONFIG_FILES(lang/qt/src/qgpgme_version.h)
 AC_CONFIG_FILES([lang/Makefile lang/cl/Makefile lang/cl/gpgme.asd])
+AM_COND_IF([HAVE_DOXYGEN], [AC_CONFIG_FILES([lang/qt/doc/Doxyfile])])
+AC_CONFIG_FILES(lang/qt/doc/Makefile)
+AC_CONFIG_FILES([lang/python/Makefile
+                lang/python/gpg/version.py
+                lang/python/tests/Makefile])
+AC_CONFIG_FILES([lang/python/setup.py], [chmod a+x lang/python/setup.py])
 AC_OUTPUT
 
 echo "
@@ -673,9 +893,8 @@ echo "
 
         UI Server:         $uiserver
         FD Passing:        $use_descriptor_passing
-        GPGME Pthread:     $have_pthread
 
-        Language bindings: $enabled_languages
+        Language bindings: ${enabled_languages_v:-$enabled_languages}
 "
 if test "x${gpg_config_script_warn}" != x; then
 cat <<G10EOF