summaryrefslogtreecommitdiffstats
path: root/mkspecs/features/qt_tool.prf
blob: 5e05f938946756997ac19a2b66543dbc324840c5 (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
TEMPLATE = app

CONFIG += qt warn_on console
isEmpty(QMAKE_INFO_PLIST): CONFIG -= app_bundle

build_all:!build_pass {
    CONFIG -= build_all
    CONFIG += release
}

target.path = $$[QT_INSTALL_BINS]
INSTALLS += target

# If we are doing a prefix build, create a "module" pri which enables
# qtPrepareTool() to work with the non-installed build.
!build_pass:!exists($$[QT_INSTALL_PREFIX]/.qmake.cache) {

    isEmpty(MODULE):MODULE = $$TARGET

    MODULE_DEPENDS = $$replace(QT, -private$, )

    # Find the module's source root dir.
    MODULE_PROFILE_DIR = $$_PRO_FILE_PWD_
    for(ever) {
        exists($$MODULE_PROFILE_DIR/sync.profile):break()
        nmpri = $$dirname(MODULE_PROFILE_DIR)
        equals(nmpri, $$MODULE_PROFILE_DIR): \
            error("No sync.profile found. This does not look like a Qt module source tree.")
        MODULE_PROFILE_DIR = $$nmpri
        unset(nmpri)
    }

    isEmpty(MODULE_BASE_DIR): MODULE_BASE_DIR = $$MODULE_PROFILE_DIR
    MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_DIR)
    isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR

    load(resolve_target)
    cmd = $$shell_path($$QMAKE_RESOLVED_TARGET)
    deps = $$resolve_depends(QT, "QT.")
    !isEmpty(deps) {
        for(dep, deps) {
            deppath += $$shell_path($$eval(QT.$${dep}.libs))
            for(rpath, QT.$${dep}.rpath_link): \
                deppath += $$shell_path($$rpath)
        }
        deppath = $$unique(deppath)
        equals(QMAKE_DIR_SEP, /) {
            equals(QMAKE_HOST.os, Windows): \
                var = PATH
            else:contains(QMAKE_HOST.os, Linux): \
                var = LD_LIBRARY_PATH
            else:equals(QMAKE_HOST.os, Darwin): \
                var = DYLD_LIBRARY_PATH
            else: \
                error("Operating system not supported.")
            cmd = "$$var=$$join(deppath, :)${$$var:+:\$$$var} $$cmd"
        } else {
            # Escape closing parens when expanding %PATH%, otherwise cmd confuses itself.
            cmd = "(set PATH=$$join(deppath, ;);%PATH:)=^)%) & $$cmd"
        }
    }

    TOOL_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_$${MODULE}.pri

    TOOL_PRI_CONT = "QT_TOOL.$${MODULE}.command = $$val_escape(cmd)"
    write_file($$TOOL_PRI, TOOL_PRI_CONT)|error("Aborting.")

    # Then, inject the new tool into the current cache state
    !contains(QMAKE_INTERNAL_INCLUDED_FILES, $$TOOL_PRI) { # before the actual include()!
        added = $$TOOL_PRI
        cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added)
        unset(added)
    }
    include($$TOOL_PRI)
    for(var, $$list(binary depends)): \
        cache(QT_TOOL.$${MODULE}.$$var, transient)

}