marbledir.files = $$MARBLEDIR doc.files = $$DOC_FILES translation.files = $$replace(TRANSLATIONS, .ts, .qm) exists($$[QT_INSTALL_TRANSLATIONS]) { qt_translation_dir = $$[QT_INSTALL_TRANSLATIONS]/ } else: exists(/usr/share/qt4/translations) { # On some cross-compilation environments, the translations are either missing or not # where they're expected to be. In such cases, try copying from the system. qt_translation_dir = /usr/share/qt4/translations } qttranslation.files = $$join(QTTRANSLATIONS," "$$qt_translation_dir/,$$qt_translation_dir/) 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 doc.path = $$datadir/Documentation translation.path = Contents/Resources/translations qttranslation.path = Contents/Resources/translations QMAKE_BUNDLE_DATA += marbledir 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 doc.path = $$WINDOWSSTAGING/Documentation CONFIG -= copy_dir_files deploy.path = $$WINDOWSSTAGING deploy.CONFIG += no_check_exist target.path = $$WINDOWSSTAGING marbledir.path = $$WINDOWSSTAGING/data INSTALLS += deploy marbledir target doc translation.path = $$WINDOWSSTAGING/translations qttranslation.path = $$WINDOWSSTAGING/translations INSTALLS += translation qttranslation 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)/subsurface/Documentation$${nl}\ DESKTOPDIR = $(DATADIR)/applications$${nl}\ ICONPATH = $(DATADIR)/icons/hicolor$${nl}\ ICONDIR = $(ICONPATH)/scalable/apps$${nl}\ MANDIR = $(DATADIR)/man/man1$${nl} 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 marbledir.path = /$(DATADIR)/subsurface/data doc.path = /$(DOCDIR) doc.CONFIG += no_check_exist translation.path = /$(DATADIR)/subsurface/translations translation.CONFIG += no_check_exist INSTALLS += target desktop manpage doc marbledir translation icon 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