summaryrefslogtreecommitdiffstats
path: root/subsurface-install.pri
blob: a7aa99cd446ab8cf5942cb7fbff2315b384dd5d5 (plain) (blame)
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
marbledir.files = $$MARBLEDIR
xslt.files = $$XSLT_FILES
icons.files = $$ICONS_FILES
doc.files = $$DOC_FILES
translation.files = $$replace(TRANSLATIONS, .ts, .qm)
qttranslation.files = $$join(QTTRANSLATIONS," "$$[QT_INSTALL_TRANSLATIONS]/,$$[QT_INSTALL_TRANSLATIONS]/)

nltab = $$escape_expand(\\n\\t)

mac {
    # OS X bundling rules
    #  "make mac-deploy" deploys the external libs (Qt, libdivecomputer, libusb, etc.) into the bundle
    #  "make install" installs the bundle to /Applications
    #  "make mac-create-dmg" creates Subsurface.dmg

    mac_bundle.path = /Applications
    mac_bundle.files = Subsurface.app
    mac_bundle.CONFIG += no_check_exist directory
    INSTALLS += mac_bundle
    install.depends += mac-deploy

    datadir = Contents/Resources/share
    marbledir.path = Contents/Resources/data
    xslt.path = $$datadir
    doc.path = $$datadir/doc
    translation.path = Contents/Resources/translations
    qttranslation.path = Contents/Resources/translations
    doc.files = $$files($$doc.files)
    QMAKE_BUNDLE_DATA += marbledir xslt doc translation qttranslation

    mac_deploy.target = mac-deploy
    mac_deploy.commands += $$[QT_INSTALL_BINS]/macdeployqt $${TARGET}.app
    !isEmpty(V):mac_deploy.commands += -verbose=1

    mac_dmg.target = mac-create-dmg
    mac_dmg.commands = $$mac_deploy.commands -dmg
    mac_dmg.commands += $${nltab}$(MOVE) $${TARGET}.dmg $${TARGET}-$${FULL_VERSION}.dmg
    QMAKE_EXTRA_TARGETS += mac_deploy mac_dmg
} else: win32 {
    # Windows bundling rules
    # We don't have a helpful tool like macdeployqt for Windows, so we hardcode
    # which libs we need.
    # The only target is "make install", which copies everything into packaging/windows
    WINDOWSSTAGING = packaging/windows
    NSIFILE = $$PWD/$$WINDOWSSTAGING/subsurface.nsi
    NSIINPUTFILE = $$PWD/$$WINDOWSSTAGING/subsurface.nsi.in
    MAKENSIS = /usr/bin/makensis

    deploy.path = $$WINDOWSSTAGING
    deploy.files += $$xslt.files $$doc.files $$icons.files
    deploy.CONFIG += no_check_exist
    target.path = $$WINDOWSSTAGING
    marbledir.path = $$WINDOWSSTAGING/data
    INSTALLS += deploy marbledir target

    qt_conf.commands = echo \'[Paths]\' > $@
    qt_conf.commands += $${nltab}echo \'Prefix=.\' >> $@
    qt_conf.target = $$PWD/packaging/windows/qt.conf
    install.depends += qt_conf

    # Plugin code
    defineTest(deployPlugin) {
        plugin = $$1
        plugintype = $$dirname(1)
        CONFIG(debug, debug|release): plugin = $${plugin}d4.dll
        else: plugin = $${plugin}4.dll

        abs_plugin = $$[QT_INSTALL_PLUGINS]/$$plugin
        ABS_DEPLOYMENT_PLUGIN += $$abs_plugin
        export(ABS_DEPLOYMENT_PLUGIN)

        safe_name = $$replace(1, /, _)
        INSTALLS += $$safe_name

        # Work around qmake bug in Qt4 that it can't handle $${xx}.yy properly
        eval(safe_name_files = $${safe_name}.files)
        eval(safe_name_path = $${safe_name}.path)
        $$safe_name_files = $$abs_plugin
        $$safe_name_path = $$WINDOWSSTAGING/plugins/$$plugintype
        export($$safe_name_files)
        export($$safe_name_path)
        export(INSTALLS)
    }
    # Convert plugin names to the relative DLL path
    for(plugin, $$list($$DEPLOYMENT_PLUGIN)) {
        deployPlugin($$plugin)
    }

    !win32-msvc* {
        #!equals($$QMAKE_HOST.os, "Windows"): dlls.commands += OBJDUMP=`$$QMAKE_CC -dumpmachine`-objdump
        dlls.commands += PATH=\$\$PATH:`$$QMAKE_CC -print-search-dirs | sed -nE \'/^libraries: =/{s///;s,/lib/?(:|\$\$),/bin\\1,g;p;q;}\'`
        dlls.commands += perl $$PWD/scripts/win-ldd.pl
        # equals(QMAKE_HOST.os, "Windows"): EXE_SUFFIX = .exe
        EXE_SUFFIX = .exe
        CONFIG(debug, debug|release): dlls.commands += $$OUT_PWD/debug/subsurface$$EXE_SUFFIX
        else: dlls.commands += $$OUT_PWD/release/$$TARGET$$EXE_SUFFIX

        dlls.commands += $$ABS_DEPLOYMENT_PLUGIN $$LIBS
        dlls.commands += | while read name; do $(INSTALL_FILE) \$\$name $$PWD/$$WINDOWSSTAGING; done
        dlls.depends += $(DESTDIR_TARGET)

        nsis.commands += cat $$NSIINPUTFILE | sed -e \'s/VERSIONTOKEN/$$VERSION_STRING/;s/PRODVTOKEN/$${PRODVERSION_STRING}/\' > $$NSIFILE
        nsis.depends += $$NSIINPUTFILE
        nsis.target = $$NSISFILE
        installer.commands += $$MAKENSIS $$NSIFILE
        installer.target = installer
        installer.depends = nsis install
        QMAKE_EXTRA_TARGETS = installer nsis
        install.depends += dlls
    }
} else {
    # Linux install rules
    # On Linux, we can count on packagers doing the right thing
    # We just need to drop a few files here and there

    # This is a fake rule just to create some rules in the target file
    nl = $$escape_expand(\\n)
    dummy.target = dummy-only-for-var-expansion
    dummy.commands  = $${nl}prefix = /usr$${nl}\
BINDIR = $(prefix)/bin$${nl}\
DATADIR = $(prefix)/share$${nl}\
DOCDIR = $(DATADIR)/doc/subsurface$${nl}\
DESKTOPDIR = $(DATADIR)/applications$${nl}\
ICONPATH = $(DATADIR)/icons/hicolor$${nl}\
ICONDIR = $(ICONPATH)/scalable/apps$${nl}\
MANDIR = $(DATADIR)/man/man1$${nl}\
XSLTDIR = $(DATADIR)/subsurface
    QMAKE_EXTRA_TARGETS += dummy

    WINDOWSSTAGING = ./packaging/windows

    target.path = /$(BINDIR)
    target.files = $$TARGET

    desktop.path = /$(DESKTOPDIR)
    desktop.files = $$DESKTOP_FILE
    manpage.path = /$(MANDIR)
    manpage.files = $$MANPAGE

    icon.path = /$(ICONDIR)
    icon.files = $$ICON

    xslt.path = /$(XSLTDIR)
    marbledir.path = /$(DATADIR)/subsurface/data
    doc.path = /$(DOCDIR)

    doc.CONFIG += no_check_exist

    # FIXME: Linguist translations
    #l10n_install.commands = for LOC in $$files(share/locale/*/LC_MESSAGES); do \
    #                $(INSTALL_PROGRAM) -d $(INSTALL_ROOT)/$(prefix)/$$LOC; \
    #                $(INSTALL_FILE) $$LOC/subsurface.mo $(INSTALL_ROOT)/$(prefix)/$$LOC/subsurface.mo; \
    #        done
    #install.depends += l10n_install

    INSTALLS += target desktop icon manpage xslt doc marbledir
    install.target = install
}
!isEmpty(TRANSLATIONS) {
	isEmpty(QMAKE_LRELEASE) {
		win32: QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
		else: QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
	}
	isEmpty(TS_DIR):TS_DIR = translations
	TSQM.input = TRANSLATIONS
	TSQM.output = $$TS_DIR/${QMAKE_FILE_BASE}.qm
	TSQM.CONFIG += no_link target_predeps
	TSQM.commands = $$QMAKE_LRELEASE ${QMAKE_FILE_IN} -qm $$TS_DIR/${QMAKE_FILE_BASE}.qm
	QMAKE_EXTRA_COMPILERS += TSQM
}
QMAKE_EXTRA_TARGETS += install $$install.depends