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
|
marbledirh.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
|