summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt_helper_lib.prf
blob: 2d67a30fb7f5f6f9615923666ccd189fe5137337 (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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#
#  W A R N I N G
#  -------------
#
# This file is not part of the Qt API.  It exists purely as an
# implementation detail.  It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#

load(qt_build_paths)

TEMPLATE = lib
CONFIG -= qt
QT =  # In case qt is re-added.

INCLUDEPATH += $$MODULE_INCLUDEPATH
DEFINES += $$MODULE_DEFINES

CONFIG -= warning_clean  # Don't presume 3rd party code to be clean
load(qt_common)

qtConfig(debug_and_release): CONFIG += debug_and_release
qtConfig(build_all): CONFIG += build_all

DESTDIR = $$MODULE_BASE_OUTDIR/lib
DLLDESTDIR = $$MODULE_BASE_OUTDIR/bin

THE_TARGET = $$qt5LibraryTarget($$TARGET)

MODULE = $$replace(TARGET, ^qt, )
MODULE ~= s,-,_,
MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_ext_$${MODULE}.pri
ucmodule = $$upper($$MODULE)
win32|CONFIG(static, static|shared) {
    prefix = $$QMAKE_PREFIX_STATICLIB
    suffix = $$QMAKE_EXTENSION_STATICLIB
} else {
    prefix = $$QMAKE_PREFIX_SHLIB
    suffix = $$QMAKE_EXTENSION_SHLIB
}

!build_pass {
    CC_USES =
    LD_USES =
    for (use, QMAKE_USE) {
        use = $$split(use, /)
        name = $$take_first(use)
        nu = $$upper($$replace(name, -, _))
        !contains(use, linkonly): CC_USES += $$nu
        !contains(use, nolink): LD_USES += $$nu
    }
    CC_USES = $$unique(CC_USES)
    LD_USES = $$unique(LD_USES)
    MODULE_PRI_CONT = \
        "QMAKE_DEPENDS_$${ucmodule}_CC =$$join(CC_USES, " ", " ")" \
        "QMAKE_DEPENDS_$${ucmodule}_LD =$$join(LD_USES, " ", " ")" \
        "QMAKE_INCDIR_$${ucmodule} = $$val_escape(MODULE_INCLUDEPATH)" \
        "QMAKE_DEFINES_$${ucmodule} = $$val_escape(MODULE_DEFINES)"
    !single_android_abi:android {
        MODULE_PRI_CONT += "QMAKE_LIBS_$${ucmodule} ="
    } else: if(msvc|qtConfig(debug_and_release)): {
        win32: \
            MODULE_DEBUG_LIBS = $$DESTDIR/$$prefix$${TARGET}d.$$suffix
        else: darwin: \
            MODULE_DEBUG_LIBS = $$DESTDIR/$$prefix$${TARGET}_debug.$$suffix
        else: \
            error("'$$QMAKE_PLATFORM' does not do debug_and_release.")
        MODULE_RELEASE_LIBS = $$DESTDIR/$$prefix$${TARGET}.$$suffix
        MODULE_PRI_CONT += \
            "QMAKE_LIBS_$${ucmodule} =" \  # Needed for the module to be recognized.
            "QMAKE_LIBS_$${ucmodule}_DEBUG = $$val_escape(MODULE_DEBUG_LIBS)" \
            "QMAKE_LIBS_$${ucmodule}_RELEASE = $$val_escape(MODULE_RELEASE_LIBS)"
    } else {
        MODULE_LIBS = $$DESTDIR/$$prefix$${THE_TARGET}.$$suffix
        MODULE_PRI_CONT += \
            "QMAKE_LIBS_$${ucmodule} = $$val_escape(MODULE_LIBS)"
    }
    write_file($$MODULE_PRI, MODULE_PRI_CONT)|error()
} else: android {
    ABI_TARGET = $$qt5LibraryTarget($$TARGET)
    ABI_MODULE_LIBS = $$DESTDIR/$$prefix$${ABI_TARGET}.$$suffix
    MODULE_PRI_CONT = "QMAKE_LIBS_$${ucmodule}_$${QT_ARCH} = $$val_escape(ABI_MODULE_LIBS)"
    write_file($$MODULE_PRI, MODULE_PRI_CONT, append)|error()
}

TARGET = $$THE_TARGET

# In static builds of Qt, convenience libraries must be installed,
# as in this case they are not linked to the final library/plugin.
installed|if(!not_installed:qtConfig(static)) {
    !isEmpty(MODULE_EXT_HEADERS) {
        headers.files = $${MODULE_EXT_HEADERS}
        headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET
        INSTALLS += headers
    } else {
        !isEmpty(MODULE_EXT_HEADERS_DIR) {
            headers.files = $$MODULE_EXT_HEADERS_DIR/*
            headers.path = $$[QT_INSTALL_HEADERS]/$$TARGET
            INSTALLS += headers
        }
    }

    CONFIG += qt_install_module
    rpl_header_base = $$MODULE_INCLUDEPATH
    rpl_lib_base = $${MODULE_LIBS}
    qqt_dir = \$\$\$\$[QT_INSTALL_HEADERS]
    pri_header_replace.match = $$rpl_header_base
    pri_header_replace.replace = $$qqt_dir/$$TARGET
    pri_header_replace.CONFIG = path
    pri_header_replace.filename = qt_ext_$${MODULE}.pri
    qqt_dir = \$\$\$\$[QT_INSTALL_LIBS]
    pri_lib_replace.match = $$rpl_lib_base
    pri_lib_replace.replace = $$qqt_dir/$$prefix$${THE_TARGET}.$$suffix
    pri_lib_replace.CONFIG = path
    pri_lib_replace.filename = qt_ext_$${MODULE}.pri
    QMAKE_INSTALL_REPLACE += pri_header_replace pri_lib_replace
    if(msvc|qtConfig(debug_and_release)): {
        rpl_lib_target = $$prefix$${TARGET}.$$suffix
        pri_lib_release_replace.match = $$DESTDIR/$${rpl_lib_target}
        pri_lib_release_replace.replace = $$qqt_dir/$${rpl_lib_target}
        pri_lib_release_replace.CONFIG = path
        pri_lib_release_replace.filename = qt_ext_$${MODULE}.pri
        QMAKE_INSTALL_REPLACE += pri_lib_release_replace
        win32: \
            rpl_lib_target = $$prefix$${TARGET}d.$$suffix
        else: darwin: \
            rpl_lib_target = $$prefix$${TARGET}_debug.$$suffix
        pri_lib_debug_replace.match = $$DESTDIR/$${rpl_lib_target}
        pri_lib_debug_replace.replace = $$qqt_dir/$${rpl_lib_target}
        pri_lib_debug_replace.CONFIG = path
        pri_lib_debug_replace.filename = qt_ext_$${MODULE}.pri
        QMAKE_INSTALL_REPLACE += pri_lib_debug_replace
    }
    load(qt_installs)
}