core,w32: Fix minor potential memleak
[gpgme.git] / configure.ac
index 2a35404..e8a0815 100644 (file)
@@ -14,8 +14,9 @@
 # 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 General Public License
-# along with this program; if not, see <https://www.gnu.org/licenses/>.
+# 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.59)
@@ -26,48 +27,57 @@ min_automake_version="1.14"
 # bump the version number immediately after the release and do another
 # 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, [11])
-m4_define(mym4_version_micro, [1])
-
-# Below is m4 magic to extract and compute the revision number, the
-# decimalized short revision number, a beta version string, and a flag
-# indicating a development version (mym4_isgit). Note that the m4
-# processing is done by autoconf and not during the configure run.
-m4_define(mym4_version,
-          [mym4_version_major.mym4_version_minor.mym4_version_micro])
-m4_define([mym4_revision],
-          m4_esyscmd([git rev-parse --short HEAD | tr -d '\n\r']))
-m4_define([mym4_revision_dec],
-          m4_esyscmd_s([echo $((0x$(echo ]mym4_revision[|head -c 4)))]))
-m4_define([mym4_betastring],
-          m4_esyscmd_s([git describe --match 'gpgme-[0-9].*[0-9]' --long|\
-                        awk -F- '$3!=0{print"-beta"$3}']))
-m4_define([mym4_isgit],m4_if(mym4_betastring,[],[no],[yes]))
-m4_define([mym4_full_version],[mym4_version[]mym4_betastring])
-
-AC_INIT([gpgme],[mym4_full_version],[http://bugs.gnupg.org])
+m4_define([mym4_package],[gpgme])
+m4_define([mym4_major], [1])
+m4_define([mym4_minor], [13])
+m4_define([mym4_micro], [1])
+
+# 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/changed:       AGE=0)
+#   (Interfaces removed:               AGE=0)
 #
-LIBGPGME_LT_CURRENT=31
-LIBGPGME_LT_AGE=20
-LIBGPGME_LT_REVISION=1
+LIBGPGME_LT_CURRENT=33
+LIBGPGME_LT_AGE=22
+LIBGPGME_LT_REVISION=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=13
-LIBGPGMEPP_LT_AGE=7
+LIBGPGMEPP_LT_CURRENT=15
+LIBGPGMEPP_LT_AGE=9
 LIBGPGMEPP_LT_REVISION=0
 
 LIBQGPGME_LT_CURRENT=10
 LIBQGPGME_LT_AGE=3
-LIBQGPGME_LT_REVISION=2
+LIBQGPGME_LT_REVISION=3
+################################################
+
+AC_SUBST(LIBGPGME_LT_CURRENT)
+AC_SUBST(LIBGPGME_LT_AGE)
+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)
 
 # If the API is changed in an incompatible way: increment the next counter.
 GPGME_CONFIG_API_VERSION=1
@@ -78,17 +88,14 @@ NEED_LIBASSUAN_API=2
 NEED_LIBASSUAN_VERSION=2.4.2
 
 
-PACKAGE=$PACKAGE_NAME
-VERSION=$PACKAGE_VERSION
-
-VERSION_MAJOR=mym4_version_major
-VERSION_MINOR=mym4_version_minor
-VERSION_MICRO=mym4_version_micro
+VERSION_MAJOR=mym4_major
+VERSION_MINOR=mym4_minor
+VERSION_MICRO=mym4_micro
 
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR(src/gpgme.h.in)
-AC_CONFIG_HEADER(config.h)
+AC_CONFIG_HEADER(conf/config.h)
 AM_INIT_AUTOMAKE([serial-tests dist-bzip2 no-dist-gzip])
 AM_MAINTAINER_MODE
 AC_CANONICAL_HOST
@@ -98,6 +105,41 @@ AC_ARG_VAR(SYSROOT,[locate config scripts also below that directory])
 # Enable GNU extensions on systems that have them.
 AC_GNU_SOURCE
 
+# 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])
+
 AH_VERBATIM([_REENTRANT],
 [/* To allow the use of GPGME in multithreaded programs we have to use
   special features from the library.
@@ -114,25 +156,12 @@ 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(LIBGPGME_LT_CURRENT)
-AC_SUBST(LIBGPGME_LT_AGE)
-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)
+
+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
@@ -187,15 +216,12 @@ have_w64_system=no
 have_macos_system=no
 build_w32_glib=no
 build_w32_qt=no
-available_languages="cl cpp python python2 python3 qt"
+available_languages="cl cpp python qt"
 default_languages="cl cpp python qt"
 case "${host}" in
     x86_64-*mingw32*)
         have_w64_system=yes
         ;;
-    *-mingw32ce*)
-        have_w32ce_system=yes
-       ;;
     *-linux-androideabi)
         have_android_system=yes
         ;;
@@ -204,7 +230,7 @@ case "${host}" in
         ;;
 esac
 case "${host}" in
-    *-mingw32ce*|*-mingw32*)
+    *-mingw32*)
        have_dosish_system=yes
         have_w32_system=yes
         GPG_DEFAULT='c:\\gnupg\\gpg.exe'
@@ -248,12 +274,6 @@ if test "$have_w64_system" = yes; then
 fi
 AM_CONDITIONAL(HAVE_W64_SYSTEM, test "$have_w64_system" = yes)
 
-if test "$have_w32ce_system" = yes; then
-   AC_DEFINE(HAVE_W32CE_SYSTEM,1,
-             [Defined if we run on a W32 CE API based system])
-fi
-AM_CONDITIONAL(HAVE_W32CE_SYSTEM, test "$have_w32ce_system" = yes)
-
 if test "$have_android_system" = yes; then
    AC_DEFINE(HAVE_ANDROID_SYSTEM,1, [Defined if we build for an Android system])
 fi
@@ -363,7 +383,7 @@ if test "$found" = "1"; then
 
         AC_CHECK_PROGS([DOXYGEN], [doxygen])
         if test -z "$DOXYGEN";
-            # This is not highlighted becase it's not really important.
+            # This is not highlighted because 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])
@@ -382,13 +402,9 @@ 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
+if test "$found_py" = "1"; then
     AX_PKG_SWIG
     if test -z "$SWIG"; then
         if test "$explicit_languages" = "1"; then
@@ -400,36 +416,15 @@ if test "$found_py" = "1" -o "$found_py2" = "1" -o "$found_py3" = "1"; then
             enabled_languages=$(echo $enabled_languages | sed 's/python//')
         fi
     else
-        # Reset all the stuff, just to be sure.
+        # Reset the version collecting vars.
        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
+         # Reset everything, so that we can look for another Python.
+          m4_foreach([mym4pythonver],
+                     [[2.7],[3.4],[3.5],[3.6],[3.7],[3.8],[all]],
+           [unset PYTHON
            unset PYTHON_VERSION
            unset PYTHON_CPPFLAGS
            unset PYTHON_LDFLAGS
@@ -442,13 +437,14 @@ if test "$found_py" = "1" -o "$found_py2" = "1" -o "$found_py3" = "1"; then
            unset am_cv_python_platform
            unset am_cv_python_pythondir
            unset am_cv_python_pyexecdir
-           AM_PATH_PYTHON([3.4], [
+           AM_PATH_PYTHON(mym4pythonver, [
                AX_PYTHON_DEVEL
                if test "$PYTHON_VERSION"; then
                        PYTHONS="$(echo $PYTHONS $PYTHON)"
                        PYTHON_VERSIONS="$(echo $PYTHON_VERSIONS $PYTHON_VERSION)"
                fi
-           ], :)
+           ], :, m4_if([mym4pythonver],[all],[],[python]mym4pythonver))
+           ])
        fi
 
        # Recover some values lost in the second attempt to find Python.
@@ -488,9 +484,11 @@ AC_DEFINE_UNQUOTED(BUILD_REVISION, "$BUILD_REVISION",
                    [GIT commit id revision used to build this package])
 
 changequote(,)dnl
-BUILD_FILEVERSION=`echo "$PACKAGE_VERSION"|sed 's/\([0-9.]*\).*/\1./;s/\./,/g'`
+BUILD_VERSION=`echo "$PACKAGE_VERSION" | sed 's/\([0-9.]*\).*/\1./'`
 changequote([,])dnl
-BUILD_FILEVERSION="${BUILD_FILEVERSION}mym4_revision_dec"
+BUILD_VERSION="${BUILD_VERSION}mym4_revision_dec"
+BUILD_FILEVERSION=`echo "${BUILD_VERSION}" | tr . ,`
+AC_SUBST(BUILD_VERSION)
 AC_SUBST(BUILD_FILEVERSION)
 
 AC_ARG_ENABLE([build-timestamp],
@@ -537,7 +535,7 @@ AM_CONDITIONAL(RUN_G13_TESTS, test "$run_g13_test" = "yes")
 
 
 # Checks for header files.
-AC_CHECK_HEADERS_ONCE([locale.h sys/select.h sys/uio.h argp.h
+AC_CHECK_HEADERS_ONCE([locale.h sys/select.h sys/uio.h argp.h stdint.h
                        unistd.h sys/time.h sys/types.h sys/stat.h])
 
 
@@ -548,6 +546,15 @@ AC_SYS_LARGEFILE
 AC_TYPE_OFF_T
 AC_TYPE_UINTPTR_T
 
+# We require uint64_t
+if test "$ac_cv_header_stdint_h" != yes; then
+   AC_MSG_ERROR([[
+***
+*** No stdint.h and thus no uint64_t type.  Can't build this library.
+***]])
+fi
+
+
 # A simple compile time check in gpgme.h for GNU/Linux systems that
 # prevents a file offset bits mismatch between gpgme and the application.
 NEED__FILE_OFFSET_BITS=0
@@ -609,6 +616,9 @@ if test "$GCC" = yes; then
           CFLAGS="$CFLAGS -Wdeclaration-after-statement"
           CFLAGS="$CFLAGS -Wno-missing-field-initializers"
           CFLAGS="$CFLAGS -Wno-sign-compare"
+          CFLAGS="$CFLAGS -Wno-format-zero-length"
+          CFLAGS="$CFLAGS -Wno-format-truncation"
+          CFLAGS="$CFLAGS -Wno-sizeof-pointer-div"
         fi
         CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wno-shadow"
 
@@ -850,7 +860,7 @@ if test "$have_gpg_error" = "no"; then
 ***
 *** You need libgpg-error to build this program.
 **  This library is for example available at
-***   ftp://ftp.gnupg.org/gcrypt/libgpg-error
+***   https://www.gnupg.org/ftp/gcrypt/libgpg-error/
 *** (at least version $NEED_GPG_ERROR_VERSION is required.)
 ***]])
 fi
@@ -860,7 +870,7 @@ if test "$have_libassuan" = "no"; then
 ***
 *** You need libassuan to build this program.
 *** This library is for example available at
-***   ftp://ftp.gnupg.org/gcrypt/libassuan/
+***   https://www.gnupg.org/ftp/gcrypt/libassuan/
 *** (at least version $NEED_LIBASSUAN_VERSION (API $NEED_LIBASSUAN_API) is required).
 ***]])
 fi
@@ -882,11 +892,15 @@ AC_CONFIG_FILES(Makefile src/Makefile
                 tests/gpg/Makefile
                 tests/gpgsm/Makefile
                 tests/opassuan/Makefile
+                tests/json/Makefile
                doc/Makefile
                 src/versioninfo.rc
+                src/gpgme.pc
+                src/gpgme-glib.pc
                 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/tests/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)
@@ -899,6 +913,9 @@ 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/js/Makefile lang/js/src/Makefile
+                 lang/js/BrowserTestExtension/Makefile
+                 lang/js/DemoExtension/Makefile])
 AC_CONFIG_FILES(lang/qt/doc/Makefile)
 AC_CONFIG_FILES([lang/python/Makefile
                 lang/python/version.py