aboutsummaryrefslogtreecommitdiffstats
path: root/m4/qt6.m4
blob: e87fc244f325d69100744ade403a17f69d276c26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
dnl qt6.m4
dnl Copyright (C) 2016 Intevation GmbH
dnl
dnl This file is part of gpgme and is provided under the same license as gpgme

dnl Autoconf macro to find Qt6
dnl
dnl sets GPGME_QT6_LIBS and GPGME_QT6_CFLAGS
dnl
dnl if QT6 was found have_qt6_libs is set to yes

AC_DEFUN([FIND_QT6],
[
  have_qt6_libs="no";

  PKG_CHECK_MODULES(GPGME_QT6,
                    Qt6Core >= 6.4.0,
                    [have_qt6_libs="yes"],
                    [have_qt6_libs="no"])

  PKG_CHECK_MODULES(GPGME_QT6TEST,
                    Qt6Test >= 6.4.0,
                    [have_qt6test_libs="yes"],
                    [have_qt6test_libs="no"])

  if test "$have_qt6_libs" = "yes"; then
    # Qt6 moved moc to libexec
    qt6libexecdir=$($PKG_CONFIG --variable=libexecdir 'Qt6Core >= 6.4.0')
    AC_PATH_TOOL(MOC, moc, [], [$qt6libexecdir])
    if test -z "$MOC"; then
      AC_MSG_WARN([moc not found - Qt 6 binding will not be built.])
      have_qt6_libs="no";
    fi
  fi

  if test "$have_qt6_libs" = "yes"; then
    if test "$have_no_direct_extern_access" = yes; then
      if test -z "$use_no_direct_extern_access" && test "$have_w32_system" != yes; then
        mkspecsdir=$($PKG_CONFIG --variable mkspecsdir Qt6Platform)
        if test -n "$mkspecsdir"; then
          AC_MSG_CHECKING([whether Qt was built with -mno-direct-extern-access])
          if grep -q "QT_CONFIG .* no_direct_extern_access" $mkspecsdir/qconfig.pri; then
            use_no_direct_extern_access="yes"
          else
            use_no_direct_extern_access="no"
          fi
          AC_MSG_RESULT([$use_no_direct_extern_access])
        else
          AC_MSG_WARN([Failed to determine Qt's mkspecs directory. Cannot check its build configuration.])
        fi
      fi
      if test "$use_no_direct_extern_access" = yes; then
        GPGME_QT6_CFLAGS="$GPGME_QT6_CFLAGS -mno-direct-extern-access"
      fi
    fi

    dnl Check that a binary can actually be build with this qt.
    dnl pkg-config may be set up in a way that it looks also for libraries
    dnl of the build system and not only for the host system. In that case
    dnl we check here that we can actually compile / link a qt application
    dnl for host.
    OLDCPPFLAGS=$CPPFLAGS
    OLDLIBS=$LIBS

    CPPFLAGS=$GPGME_QT6_CFLAGS
    LIBS=$GPGME_QT6_LIBS
    AC_LANG_PUSH(C++)
    AC_MSG_CHECKING([whether a simple Qt program can be built])
    AC_LINK_IFELSE([AC_LANG_SOURCE([
      #include <QCoreApplication>
      int main (int argc, char **argv) {
      QCoreApplication app(argc, argv);
      app.exec();
    }])], [have_qt6_libs='yes'], [have_qt6_libs='no'])
    AC_MSG_RESULT([$have_qt6_libs])
    AC_LANG_POP()

    CPPFLAGS=$OLDCPPFLAGS
    LIBS=$OLDLIBS
  fi
])