TEMPLATE = app TARGET = goldendict VERSION = 1.5.0-RC2+git # Generate version file. We do this here and in a build rule described later. # The build rule is required since qmake isn't run each time the project is # rebuilt; and doing it here is required too since any other way the RCC # compiler would complain if version.txt wouldn't exist (fresh checkouts). system(git describe --tags --always --dirty > version.txt): hasGit=1 isEmpty( hasGit ) { message(Failed to precisely describe the version via Git -- using the default version string) system(echo $$VERSION > version.txt) } # DEPENDPATH += . generators INCLUDEPATH += . QT += core \ gui \ xml \ network \ svg greaterThan(QT_MAJOR_VERSION, 4) { QT += widgets \ webkitwidgets \ printsupport \ help # QMediaPlayer is not available in Qt4. !CONFIG( no_qtmultimedia_player ) { QT += multimedia DEFINES += MAKE_QTMULTIMEDIA_PLAYER } } else { QT += webkit CONFIG += help } !CONFIG( no_ffmpeg_player ) { DEFINES += MAKE_FFMPEG_PLAYER } QT += sql CONFIG += exceptions \ rtti \ stl OBJECTS_DIR = build UI_DIR = build MOC_DIR = build RCC_DIR = build LIBS += \ -lz \ -lbz2 \ -llzo2 win32 { TARGET = GoldenDict win32-msvc* { VERSION = 1.5.0 # More complicated things cause errors during compilation under MSVC++ DEFINES += __WIN32 _CRT_SECURE_NO_WARNINGS contains(QMAKE_TARGET.arch, x86_64) { DEFINES += NOMINMAX __WIN64 } LIBS += -L$${PWD}/winlibs/lib/msvc QMAKE_CXXFLAGS += /wd4290 # silence the warning C4290: C++ exception specification ignored QMAKE_LFLAGS_RELEASE += /OPT:REF /OPT:ICF DEFINES += GD_NO_MANIFEST # QMAKE_CXXFLAGS_RELEASE += /GL # slows down the linking significantly LIBS += -lshell32 -luser32 -lsapi -lole32 Debug: LIBS+= -lhunspelld Release: LIBS+= -lhunspell HUNSPELL_LIB = hunspell } else { CONFIG(gcc48) { x64 { LIBS += -L$${PWD}/winlibs/lib64-48 QMAKE_CXXFLAGS += -m64 QMAKE_CFLAGS += -m64 } else { LIBS += -L$${PWD}/winlibs/lib32-48 } } else { LIBS += -L$${PWD}/winlibs/lib } !x64:QMAKE_LFLAGS += -Wl,--large-address-aware isEmpty(HUNSPELL_LIB) { LIBS += -lhunspell-1.6.1 } else { LIBS += -l$$HUNSPELL_LIB } QMAKE_CXXFLAGS += -Wextra -Wempty-body } LIBS += -liconv \ -lwsock32 \ -lpsapi \ -lole32 \ -loleaut32 \ -ladvapi32 \ -lcomdlg32 LIBS += -lvorbisfile \ -lvorbis \ -logg !CONFIG( no_ffmpeg_player ) { LIBS += -lao \ -lswresample-gd \ -lavutil-gd \ -lavformat-gd \ -lavcodec-gd } RC_FILE = goldendict.rc INCLUDEPATH += winlibs/include # Enable console in Debug mode on Windows, with useful logging messages Debug:CONFIG += console Release:DEFINES += NO_CONSOLE gcc48:QMAKE_CXXFLAGS += -Wno-unused-local-typedefs CONFIG += zim_support !CONFIG( no_chinese_conversion_support ) { CONFIG += chinese_conversion_support } greaterThan(QT_MAJOR_VERSION, 4) { LIBS += -luxtheme } } unix:!mac { DEFINES += HAVE_X11 # This is to keep symbols for backtraces QMAKE_CXXFLAGS += -rdynamic QMAKE_LFLAGS += -rdynamic greaterThan(QT_MAJOR_VERSION, 4) { greaterThan(QT_MINOR_VERSION, 0) { QT += x11extras } } CONFIG += link_pkgconfig PKGCONFIG += vorbisfile \ vorbis \ ogg \ hunspell !CONFIG( no_ffmpeg_player ) { PKGCONFIG += ao \ libavutil \ libavformat \ libavcodec \ libswresample \ } arm { LIBS += -liconv } else { LIBS += -lX11 -lXtst } # Install prefix: first try to use qmake's PREFIX variable, # then $PREFIX from system environment, and if both fails, # use the hardcoded /usr/local. PREFIX = $${PREFIX} isEmpty( PREFIX ):PREFIX = $$(PREFIX) isEmpty( PREFIX ):PREFIX = /usr/local message(Install Prefix is: $$PREFIX) DEFINES += PROGRAM_DATA_DIR=\\\"$$PREFIX/share/goldendict/\\\" target.path = $$PREFIX/bin/ locale.path = $$PREFIX/share/goldendict/locale/ locale.files = locale/*.qm INSTALLS += target \ locale icons.path = $$PREFIX/share/pixmaps icons.files = redist/icons/*.* INSTALLS += icons desktops.path = $$PREFIX/share/applications desktops.files = redist/*.desktop INSTALLS += desktops appdata.path = $$PREFIX/share/metainfo appdata.files = redist/*.appdata.xml INSTALLS += appdata helps.path = $$PREFIX/share/goldendict/help/ helps.files = help/*.qch INSTALLS += helps } freebsd { LIBS += -liconv -lexecinfo } mac { TARGET = GoldenDict # Uncomment this line to make a universal binary. # You will need to use Xcode 3 and Qt Carbon SDK # if you want the support for PowerPC and/or Mac OS X 10.4 # CONFIG += x86 x86_64 ppc LIBS = -lz \ -lbz2 \ -liconv \ -lvorbisfile \ -lvorbis \ -logg \ -lhunspell-1.6.1 \ -llzo2 !CONFIG( no_ffmpeg_player ) { LIBS += -lao \ -lswresample-gd \ -lavutil-gd \ -lavformat-gd \ -lavcodec-gd } INCLUDEPATH = $${PWD}/maclibs/include LIBS += -L$${PWD}/maclibs/lib -framework AppKit -framework Carbon OBJECTIVE_SOURCES += lionsupport.mm \ machotkeywrapper.mm \ macmouseover.mm \ speechclient_mac.mm ICON = icons/macicon.icns QMAKE_INFO_PLIST = myInfo.plist QMAKE_POST_LINK = mkdir -p GoldenDict.app/Contents/Frameworks & \ cp -nR $${PWD}/maclibs/lib/ GoldenDict.app/Contents/Frameworks/ & \ mkdir -p GoldenDict.app/Contents/MacOS/locale & \ cp -R locale/*.qm GoldenDict.app/Contents/MacOS/locale/ & \ mkdir -p GoldenDict.app/Contents/MacOS/help & \ cp -R $${PWD}/help/*.qch GoldenDict.app/Contents/MacOS/help/ CONFIG += zim_support !CONFIG( no_chinese_conversion_support ) { CONFIG += chinese_conversion_support CONFIG( x86 ) { QMAKE_POST_LINK += & mkdir -p GoldenDict.app/Contents/MacOS/opencc & \ cp -R $${PWD}/opencc/*.json GoldenDict.app/Contents/MacOS/opencc/ & \ cp -R $${PWD}/opencc/*.ocd GoldenDict.app/Contents/MacOS/opencc/ } else { QMAKE_POST_LINK += & mkdir -p GoldenDict.app/Contents/MacOS/opencc & \ cp -R $${PWD}/opencc/x64/*.json GoldenDict.app/Contents/MacOS/opencc/ & \ cp -R $${PWD}/opencc/x64/*.ocd GoldenDict.app/Contents/MacOS/opencc/ } } } DEFINES += PROGRAM_VERSION=\\\"$$VERSION\\\" # Input HEADERS += folding.hh \ inc_case_folding.hh \ inc_diacritic_folding.hh \ mainwindow.hh \ sptr.hh \ dictionary.hh \ ex.hh \ config.hh \ sources.hh \ utf8.hh \ file.hh \ bgl_babylon.hh \ bgl.hh \ initializing.hh \ article_netmgr.hh \ dictzip.h \ btreeidx.hh \ stardict.hh \ chunkedstorage.hh \ xdxf2html.hh \ iconv.hh \ lsa.hh \ htmlescape.hh \ dsl.hh \ dsl_details.hh \ filetype.hh \ fsencoding.hh \ groups.hh \ groups_widgets.hh \ instances.hh \ article_maker.hh \ scanpopup.hh \ articleview.hh \ audioplayerinterface.hh \ audioplayerfactory.hh \ ffmpegaudioplayer.hh \ multimediaaudioplayer.hh \ externalaudioplayer.hh \ externalviewer.hh \ wordfinder.hh \ groupcombobox.hh \ keyboardstate.hh \ mouseover.hh \ preferences.hh \ mutex.hh \ mediawiki.hh \ sounddir.hh \ hunspell.hh \ dictdfiles.hh \ audiolink.hh \ wstring.hh \ wstring_qt.hh \ processwrapper.hh \ hotkeywrapper.hh \ searchpanewidget.hh \ hotkeyedit.hh \ langcoder.hh \ editdictionaries.hh \ loaddictionaries.hh \ transliteration.hh \ romaji.hh \ belarusiantranslit.hh \ russiantranslit.hh \ german.hh \ website.hh \ orderandprops.hh \ language.hh \ dictionarybar.hh \ broken_xrecord.hh \ history.hh \ atomic_rename.hh \ articlewebview.hh \ zipfile.hh \ indexedzip.hh \ termination.hh \ greektranslit.hh \ webmultimediadownload.hh \ forvo.hh \ country.hh \ about.hh \ programs.hh \ parsecmdline.hh \ dictspanewidget.hh \ maintabwidget.hh \ mainstatusbar.hh \ gdappstyle.hh \ ufile.hh \ xdxf.hh \ sdict.hh \ decompress.hh \ aard.hh \ mruqmenu.hh \ dictinfo.hh \ zipsounds.hh \ stylescombobox.hh \ extlineedit.hh \ translatebox.hh \ historypanewidget.hh \ wordlist.hh \ mdictparser.hh \ mdx.hh \ voiceengines.hh \ ffmpegaudio.hh \ articleinspector.hh \ delegate.hh \ zim.hh \ gddebug.hh \ qt4x5.hh \ gestures.hh \ tiff.hh \ dictheadwords.hh \ fulltextsearch.hh \ ftshelpers.hh \ dictserver.hh \ helpwindow.hh \ slob.hh \ ripemd.hh \ gls.hh \ splitfile.hh \ favoritespanewidget.hh \ cpp_features.hh \ treeview.hh FORMS += groups.ui \ dictgroupwidget.ui \ mainwindow.ui \ sources.ui \ initializing.ui \ scanpopup.ui \ articleview.ui \ preferences.ui \ about.ui \ editdictionaries.ui \ orderandprops.ui \ dictinfo.ui \ dictheadwords.ui \ authentication.ui \ fulltextsearch.ui SOURCES += folding.cc \ main.cc \ dictionary.cc \ config.cc \ sources.cc \ mainwindow.cc \ utf8.cc \ file.cc \ bgl_babylon.cc \ bgl.cc \ initializing.cc \ article_netmgr.cc \ dictzip.c \ btreeidx.cc \ stardict.cc \ chunkedstorage.cc \ xdxf2html.cc \ iconv.cc \ lsa.cc \ htmlescape.cc \ dsl.cc \ dsl_details.cc \ filetype.cc \ fsencoding.cc \ groups.cc \ groups_widgets.cc \ instances.cc \ article_maker.cc \ scanpopup.cc \ articleview.cc \ audioplayerfactory.cc \ multimediaaudioplayer.cc \ externalaudioplayer.cc \ externalviewer.cc \ wordfinder.cc \ groupcombobox.cc \ keyboardstate.cc \ mouseover.cc \ preferences.cc \ mutex.cc \ mediawiki.cc \ sounddir.cc \ hunspell.cc \ dictdfiles.cc \ audiolink.cc \ wstring.cc \ wstring_qt.cc \ processwrapper.cc \ hotkeywrapper.cc \ hotkeyedit.cc \ langcoder.cc \ editdictionaries.cc \ loaddictionaries.cc \ transliteration.cc \ romaji.cc \ belarusiantranslit.cc \ russiantranslit.cc \ german.cc \ website.cc \ orderandprops.cc \ language.cc \ dictionarybar.cc \ broken_xrecord.cc \ history.cc \ atomic_rename.cc \ articlewebview.cc \ zipfile.cc \ indexedzip.cc \ termination.cc \ greektranslit.cc \ webmultimediadownload.cc \ forvo.cc \ country.cc \ about.cc \ programs.cc \ parsecmdline.cc \ maintabwidget.cc \ mainstatusbar.cc \ gdappstyle.cc \ ufile.cc \ xdxf.cc \ sdict.cc \ decompress.cc \ aard.cc \ mruqmenu.cc \ dictinfo.cc \ zipsounds.cc \ stylescombobox.cc \ extlineedit.cc \ translatebox.cc \ historypanewidget.cc \ wordlist.cc \ mdictparser.cc \ mdx.cc \ voiceengines.cc \ ffmpegaudio.cc \ articleinspector.cc \ delegate.cc \ zim.cc \ gddebug.cc \ gestures.cc \ tiff.cc \ dictheadwords.cc \ fulltextsearch.cc \ ftshelpers.cc \ dictserver.cc \ helpwindow.cc \ slob.cc \ ripemd.cc \ gls.cc \ splitfile.cc \ favoritespanewidget.cc \ treeview.cc win32 { FORMS += texttospeechsource.ui SOURCES += mouseover_win32/ThTypes.c \ wordbyauto.cc \ guids.c \ x64.cc \ speechclient_win.cc \ texttospeechsource.cc \ speechhlp.cc HEADERS += mouseover_win32/ThTypes.h \ wordbyauto.hh \ uiauto.hh \ x64.hh \ texttospeechsource.hh \ sapi.hh \ sphelper.hh \ speechclient.hh \ speechhlp.hh \ hotkeys.h } mac { HEADERS += macmouseover.hh \ texttospeechsource.hh \ speechclient.hh FORMS += texttospeechsource.ui SOURCES += texttospeechsource.cc } unix:!mac { HEADERS += scanflag.hh FORMS += scanflag.ui SOURCES += scanflag.cc } greaterThan(QT_MAJOR_VERSION, 4) { HEADERS += wildcard.hh SOURCES += wildcard.cc } CONFIG( zim_support ) { DEFINES += MAKE_ZIM_SUPPORT LIBS += -llzma -lzstd } !CONFIG( no_extra_tiff_handler ) { DEFINES += MAKE_EXTRA_TIFF_HANDLER LIBS += -ltiff } CONFIG( no_epwing_support ) { DEFINES += NO_EPWING_SUPPORT } !CONFIG( no_epwing_support ) { HEADERS += epwing.hh \ epwing_book.hh \ epwing_charmap.hh SOURCES += epwing.cc \ epwing_book.cc \ epwing_charmap.cc LIBS += -leb } CONFIG( chinese_conversion_support ) { DEFINES += MAKE_CHINESE_CONVERSION_SUPPORT FORMS += chineseconversion.ui HEADERS += chinese.hh \ chineseconversion.hh SOURCES += chinese.cc \ chineseconversion.cc win32-msvc* { Debug: LIBS += -lopenccd Release: LIBS += -lopencc } else { mac { LIBS += -lopencc.2 } else { LIBS += -lopencc } } } CONFIG( old_hunspell ) { DEFINES += OLD_HUNSPELL_INTERFACE } RESOURCES += resources.qrc \ flags.qrc TRANSLATIONS += locale/ru_RU.ts \ locale/zh_CN.ts \ locale/cs_CZ.ts \ locale/de_DE.ts \ locale/el_GR.ts \ locale/bg_BG.ts \ locale/ar_SA.ts \ locale/lt_LT.ts \ locale/uk_UA.ts \ locale/vi_VN.ts \ locale/it_IT.ts \ locale/pl_PL.ts \ locale/ja_JP.ts \ locale/zh_TW.ts \ locale/sq_AL.ts \ locale/pt_BR.ts \ locale/es_AR.ts \ locale/es_BO.ts \ locale/es_ES.ts \ locale/sk_SK.ts \ locale/tr_TR.ts \ locale/qu_WI.ts \ locale/tg_TJ.ts \ locale/ay_WI.ts \ locale/be_BY.ts \ locale/be_BY@latin.ts \ locale/fr_FR.ts \ locale/ko_KR.ts \ locale/nl_NL.ts \ locale/sr_SR.ts \ locale/sv_SE.ts \ locale/tk_TM.ts \ locale/fa_IR.ts \ locale/mk_MK.ts \ locale/eo_EO.ts \ locale/fi_FI.ts \ locale/jb_JB.ts \ locale/ie_001.ts # Build version file !isEmpty( hasGit ) { QMAKE_EXTRA_TARGETS += revtarget PRE_TARGETDEPS += $$PWD/version.txt revtarget.target = $$PWD/version.txt !win32 { revtarget.commands = cd $$PWD; git describe --tags --always --dirty > $$revtarget.target } else { revtarget.commands = git --git-dir=\"$$PWD/.git\" describe --tags --always --dirty > $$revtarget.target } ALL_SOURCES = $$SOURCES $$HEADERS $$FORMS for(src, ALL_SOURCES) { QUALIFIED_SOURCES += $${PWD}/$${src} } revtarget.depends = $$QUALIFIED_SOURCES } # This makes qmake generate translations win32:# Windows doesn't seem to have *-qt4 symlinks isEmpty(QMAKE_LRELEASE):QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease isEmpty(QMAKE_LRELEASE):QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease-qt4 # The *.qm files might not exist when qmake is run for the first time, # causing the standard install rule to be ignored, and no translations # will be installed. With this, we create the qm files during qmake run. !win32 { system($${QMAKE_LRELEASE} -silent $${_PRO_FILE_} 2> /dev/null) } updateqm.input = TRANSLATIONS updateqm.output = locale/${QMAKE_FILE_BASE}.qm updateqm.commands = $$QMAKE_LRELEASE \ ${QMAKE_FILE_IN} \ -qm \ ${QMAKE_FILE_OUT} updateqm.CONFIG += no_link QMAKE_EXTRA_COMPILERS += updateqm TS_OUT = $$TRANSLATIONS TS_OUT ~= s/.ts/.qm/g PRE_TARGETDEPS += $$TS_OUT include( qtsingleapplication/src/qtsingleapplication.pri )