mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-23 20:14:05 +00:00
Add alternative build method "CMakeLists.txt" (#218)
* Add "CMakeLists.txt" * cmake: initial macOS support * cmake: initial windows support * cmake: improve styles * cmake: add FFmpeg for Linux and macOS * cmake: add FFmpeg to macOS * cmake: Carbon typo * cmake: add epwing to macOS * cmake: correctly install all files on linux * cmake: Abolish vcpkg and use winlibs/ * cmake: set version.txt timestamp * cmake: revert config.cc change * cmake: remove outdated comment
This commit is contained in:
parent
df2bb387e2
commit
b7e4afbd5b
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -37,3 +37,7 @@ GoldenDict.xcodeproj/
|
||||||
/.vs
|
/.vs
|
||||||
/.vscode
|
/.vscode
|
||||||
/.qtc_clangd
|
/.qtc_clangd
|
||||||
|
|
||||||
|
# cmake files
|
||||||
|
/cmake-build-**/
|
||||||
|
/build**/
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[submodule "eb"]
|
||||||
|
path = eb
|
||||||
|
url = git@github.com:xiaoyifang/simple-eb.git
|
566
CMakeLists.txt
Normal file
566
CMakeLists.txt
Normal file
|
@ -0,0 +1,566 @@
|
||||||
|
cmake_minimum_required(VERSION 3.23)
|
||||||
|
|
||||||
|
# Experimental Cmake build only supposed to be used by dev
|
||||||
|
# Qt6.4+ only
|
||||||
|
# LINUX, APPLE and MSVC are used to detect system
|
||||||
|
|
||||||
|
option(WITH_FFMPEG_PLAYER "Enable support for FFMPEG player" ON)
|
||||||
|
|
||||||
|
# Remove this once cmake 5.25 becomes minimum version
|
||||||
|
if(UNIX AND NOT APPLE)
|
||||||
|
set(LINUX TRUE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
add_subdirectory(eb)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
project(goldendict
|
||||||
|
VERSION 22.11.20
|
||||||
|
LANGUAGES CXX C)
|
||||||
|
|
||||||
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
|
|
||||||
|
set(CMAKE_AUTOUIC ON)
|
||||||
|
set(CMAKE_AUTOMOC ON)
|
||||||
|
set(CMAKE_AUTORCC ON)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
#### Importing Libraries
|
||||||
|
|
||||||
|
find_package(Qt6 REQUIRED COMPONENTS
|
||||||
|
Concurrent
|
||||||
|
Core5Compat
|
||||||
|
Help
|
||||||
|
LinguistTools
|
||||||
|
Multimedia
|
||||||
|
WebEngineWidgets
|
||||||
|
Widgets
|
||||||
|
Svg
|
||||||
|
Xml
|
||||||
|
)
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
find_library(CARBON_LIBRARY Carbon REQUIRED)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (UNIX)
|
||||||
|
# Provided by Cmake
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
find_package(BZip2 REQUIRED)
|
||||||
|
|
||||||
|
# PkgConfig only packages
|
||||||
|
find_package (PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules (PKGCONFIG_DEPS IMPORTED_TARGET
|
||||||
|
hunspell
|
||||||
|
lzo2
|
||||||
|
opencc
|
||||||
|
vorbis # .ogg
|
||||||
|
vorbisfile
|
||||||
|
)
|
||||||
|
if (WITH_FFMPEG_PLAYER)
|
||||||
|
pkg_check_modules(FFMPEG REQUIRED IMPORTED_TARGET
|
||||||
|
libavcodec
|
||||||
|
libavformat
|
||||||
|
libavutil
|
||||||
|
libswresample
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if(LINUX)
|
||||||
|
find_package(X11 REQUIRED)
|
||||||
|
pkg_check_modules (LIBXTST IMPORTED_TARGET xtst)
|
||||||
|
|
||||||
|
add_library(libeb SHARED IMPORTED)
|
||||||
|
set_target_properties(libeb PROPERTIES IMPORTED_LOCATION /usr/lib/libeb.so)
|
||||||
|
set_target_properties(libeb PROPERTIES INCLUDE_DIRECTORIES /usr/include/)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#### Compile time files and preprocessor flags
|
||||||
|
|
||||||
|
# Obtain git commit hash
|
||||||
|
execute_process(
|
||||||
|
COMMAND git rev-parse --short=8 HEAD
|
||||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
|
||||||
|
OUTPUT_VARIABLE GIT_HASH
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
|
||||||
|
string(TIMESTAMP date_for_version_file) # note: this variable is cached for every run, but for user installation, this doesn't matter much
|
||||||
|
configure_file(version.txt.in ${CMAKE_SOURCE_DIR}/version.txt)
|
||||||
|
|
||||||
|
# hack -> this string will be compared with another string, thus having surrounding " "
|
||||||
|
add_compile_definitions(PROGRAM_VERSION="${PROJECT_VERSION}")
|
||||||
|
|
||||||
|
add_compile_definitions(CMAKE_USED_HACK) # temporal hack to avoid breaking qmake build
|
||||||
|
add_compile_definitions(
|
||||||
|
MAKE_QTMULTIMEDIA_PLAYER
|
||||||
|
MAKE_CHINESE_CONVERSION_SUPPORT
|
||||||
|
)
|
||||||
|
|
||||||
|
if (WITH_FFMPEG_PLAYER)
|
||||||
|
add_compile_definitions(MAKE_FFMPEG_PLAYER)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if(LINUX)
|
||||||
|
add_compile_definitions(HAVE_X11)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
add_compile_definitions(NO_EPWING_SUPPORT)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
#### Sources Files
|
||||||
|
|
||||||
|
set(QRC_RESOURCES
|
||||||
|
flags.qrc
|
||||||
|
resources.qrc
|
||||||
|
scripts.qrc
|
||||||
|
)
|
||||||
|
|
||||||
|
set(UI_SRC
|
||||||
|
about.ui
|
||||||
|
articleview.ui
|
||||||
|
authentication.ui
|
||||||
|
chineseconversion.ui
|
||||||
|
dictgroupwidget.ui
|
||||||
|
dictheadwords.ui
|
||||||
|
dictinfo.ui
|
||||||
|
editdictionaries.ui
|
||||||
|
fulltextsearch.ui
|
||||||
|
groups.ui
|
||||||
|
initializing.ui
|
||||||
|
mainwindow.ui
|
||||||
|
options.ui
|
||||||
|
orderandprops.ui
|
||||||
|
preferences.ui
|
||||||
|
scanflag.ui
|
||||||
|
scanpopup.ui
|
||||||
|
sources.ui
|
||||||
|
)
|
||||||
|
|
||||||
|
set(EPWING_SUPPORT_SRC
|
||||||
|
epwing.cc
|
||||||
|
epwing.hh
|
||||||
|
epwing_book.cc
|
||||||
|
epwing_book.hh
|
||||||
|
epwing_charmap.cc
|
||||||
|
epwing_charmap.hh
|
||||||
|
)
|
||||||
|
|
||||||
|
if (APPLE)
|
||||||
|
set(MAC_SRC
|
||||||
|
machotkeywrapper.mm
|
||||||
|
macmouseover.hh
|
||||||
|
macmouseover.mm
|
||||||
|
speechclient.hh
|
||||||
|
speechclient_mac.mm
|
||||||
|
texttospeechsource.cc
|
||||||
|
texttospeechsource.hh
|
||||||
|
texttospeechsource.ui
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
set(WIN_SRC
|
||||||
|
guids.c # ONLY RELATED TO TTS
|
||||||
|
speechclient.hh
|
||||||
|
speechclient_win.cc
|
||||||
|
speechhlp.cc
|
||||||
|
speechhlp.hh
|
||||||
|
texttospeechsource.cc
|
||||||
|
texttospeechsource.hh
|
||||||
|
texttospeechsource.ui
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(WITH_FFMPEG_PLAYER)
|
||||||
|
set(FFMPEG_SUPPORT_SRC
|
||||||
|
ffmpegaudio.cc
|
||||||
|
ffmpegaudio.hh
|
||||||
|
ffmpegaudioplayer.hh
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(PROJECT_SOURCES
|
||||||
|
${UI_SRC}
|
||||||
|
${MAC_SRC}
|
||||||
|
${WIN_SRC}
|
||||||
|
${QRC_RESOURCES}
|
||||||
|
${EPWING_SUPPORT_SRC}
|
||||||
|
${FFMPEG_SUPPORT_SRC}
|
||||||
|
aard.cc
|
||||||
|
aard.hh
|
||||||
|
about.cc
|
||||||
|
about.hh
|
||||||
|
ankiconnector.cpp
|
||||||
|
ankiconnector.h
|
||||||
|
article_inspect.cpp
|
||||||
|
article_inspect.h
|
||||||
|
article_maker.cc
|
||||||
|
article_maker.hh
|
||||||
|
article_netmgr.cc
|
||||||
|
article_netmgr.hh
|
||||||
|
articleview.cc
|
||||||
|
articleview.hh
|
||||||
|
articlewebpage.cpp
|
||||||
|
articlewebpage.h
|
||||||
|
articlewebview.cc
|
||||||
|
articlewebview.hh
|
||||||
|
atomic_rename.cc
|
||||||
|
atomic_rename.hh
|
||||||
|
audiolink.cc
|
||||||
|
audiolink.hh
|
||||||
|
audiooutput.cpp
|
||||||
|
audiooutput.h
|
||||||
|
audioplayerfactory.cc
|
||||||
|
audioplayerfactory.hh
|
||||||
|
audioplayerinterface.hh
|
||||||
|
base/globalregex.cc
|
||||||
|
base/globalregex.hh
|
||||||
|
belarusiantranslit.cc
|
||||||
|
belarusiantranslit.hh
|
||||||
|
bgl.cc
|
||||||
|
bgl.hh
|
||||||
|
bgl_babylon.cc
|
||||||
|
bgl_babylon.hh
|
||||||
|
btreeidx.cc
|
||||||
|
btreeidx.hh
|
||||||
|
chinese.cc
|
||||||
|
chinese.hh
|
||||||
|
chineseconversion.cc
|
||||||
|
chineseconversion.hh
|
||||||
|
chunkedstorage.cc
|
||||||
|
chunkedstorage.hh
|
||||||
|
config.cc
|
||||||
|
config.hh
|
||||||
|
country.cc
|
||||||
|
country.hh
|
||||||
|
decompress.cc
|
||||||
|
decompress.hh
|
||||||
|
delegate.cc
|
||||||
|
delegate.hh
|
||||||
|
dictdfiles.cc
|
||||||
|
dictdfiles.hh
|
||||||
|
dictheadwords.cc
|
||||||
|
dictheadwords.hh
|
||||||
|
dictinfo.cc
|
||||||
|
dictinfo.hh
|
||||||
|
dictionary.cc
|
||||||
|
dictionary.hh
|
||||||
|
dictionarybar.cc
|
||||||
|
dictionarybar.hh
|
||||||
|
dictserver.cc
|
||||||
|
dictserver.hh
|
||||||
|
dictspanewidget.hh
|
||||||
|
dictzip.c
|
||||||
|
dictzip.h
|
||||||
|
dsl.cc
|
||||||
|
dsl.hh
|
||||||
|
dsl_details.cc
|
||||||
|
dsl_details.hh
|
||||||
|
editdictionaries.cc
|
||||||
|
editdictionaries.hh
|
||||||
|
ex.hh
|
||||||
|
externalaudioplayer.cc
|
||||||
|
externalaudioplayer.hh
|
||||||
|
externalviewer.cc
|
||||||
|
externalviewer.hh
|
||||||
|
extlineedit.cc
|
||||||
|
extlineedit.hh
|
||||||
|
favoritespanewidget.cc
|
||||||
|
favoritespanewidget.hh
|
||||||
|
file.cc
|
||||||
|
file.hh
|
||||||
|
filetype.cc
|
||||||
|
filetype.hh
|
||||||
|
fixx11h.h
|
||||||
|
folding.cc
|
||||||
|
folding.hh
|
||||||
|
forvo.cc
|
||||||
|
forvo.hh
|
||||||
|
fsencoding.cc
|
||||||
|
fsencoding.hh
|
||||||
|
ftshelpers.cc
|
||||||
|
ftshelpers.hh
|
||||||
|
fulltextsearch.cc
|
||||||
|
fulltextsearch.hh
|
||||||
|
gdappstyle.cc
|
||||||
|
gdappstyle.hh
|
||||||
|
gddebug.cc
|
||||||
|
gddebug.hh
|
||||||
|
german.cc
|
||||||
|
german.hh
|
||||||
|
gestures.cc
|
||||||
|
gestures.hh
|
||||||
|
globalbroadcaster.cpp
|
||||||
|
globalbroadcaster.h
|
||||||
|
gls.cc
|
||||||
|
gls.hh
|
||||||
|
greektranslit.cc
|
||||||
|
greektranslit.hh
|
||||||
|
groupcombobox.cc
|
||||||
|
groupcombobox.hh
|
||||||
|
groups.cc
|
||||||
|
groups.hh
|
||||||
|
groups_widgets.cc
|
||||||
|
groups_widgets.hh
|
||||||
|
headwordsmodel.cpp
|
||||||
|
headwordsmodel.h
|
||||||
|
helpwindow.cc
|
||||||
|
helpwindow.hh
|
||||||
|
history.cc
|
||||||
|
history.hh
|
||||||
|
historypanewidget.cc
|
||||||
|
historypanewidget.hh
|
||||||
|
hotkeyedit.cc
|
||||||
|
hotkeyedit.hh
|
||||||
|
hotkeywrapper.cc
|
||||||
|
hotkeywrapper.hh
|
||||||
|
htmlescape.cc
|
||||||
|
htmlescape.hh
|
||||||
|
hunspell.cc
|
||||||
|
hunspell.hh
|
||||||
|
iconv.cc
|
||||||
|
iconv.hh
|
||||||
|
iframeschemehandler.cpp
|
||||||
|
iframeschemehandler.h
|
||||||
|
inc_case_folding.hh
|
||||||
|
inc_diacritic_folding.hh
|
||||||
|
indexedzip.cc
|
||||||
|
indexedzip.hh
|
||||||
|
initializing.cc
|
||||||
|
initializing.hh
|
||||||
|
instances.cc
|
||||||
|
instances.hh
|
||||||
|
keyboardstate.cc
|
||||||
|
keyboardstate.hh
|
||||||
|
langcoder.cc
|
||||||
|
langcoder.hh
|
||||||
|
language.cc
|
||||||
|
language.hh
|
||||||
|
loaddictionaries.cc
|
||||||
|
loaddictionaries.hh
|
||||||
|
lsa.cc
|
||||||
|
lsa.hh
|
||||||
|
main.cc
|
||||||
|
mainstatusbar.cc
|
||||||
|
mainstatusbar.hh
|
||||||
|
maintabwidget.cc
|
||||||
|
maintabwidget.hh
|
||||||
|
mainwindow.cc
|
||||||
|
mainwindow.hh
|
||||||
|
mdictparser.cc
|
||||||
|
mdictparser.hh
|
||||||
|
mdx.cc
|
||||||
|
mdx.hh
|
||||||
|
mediawiki.cc
|
||||||
|
mediawiki.hh
|
||||||
|
mruqmenu.cc
|
||||||
|
mruqmenu.hh
|
||||||
|
multimediaaudioplayer.cc
|
||||||
|
multimediaaudioplayer.hh
|
||||||
|
mutex.cc
|
||||||
|
mutex.hh
|
||||||
|
orderandprops.cc
|
||||||
|
orderandprops.hh
|
||||||
|
parsecmdline.cc
|
||||||
|
parsecmdline.hh
|
||||||
|
preferences.cc
|
||||||
|
preferences.hh
|
||||||
|
processwrapper.cc
|
||||||
|
processwrapper.hh
|
||||||
|
programs.cc
|
||||||
|
programs.hh
|
||||||
|
resourceschemehandler.cpp
|
||||||
|
resourceschemehandler.h
|
||||||
|
ripemd.cc
|
||||||
|
ripemd.hh
|
||||||
|
romaji.cc
|
||||||
|
romaji.hh
|
||||||
|
russiantranslit.cc
|
||||||
|
russiantranslit.hh
|
||||||
|
sapi.hh
|
||||||
|
scanflag.cc
|
||||||
|
scanflag.hh
|
||||||
|
scanpopup.cc
|
||||||
|
scanpopup.hh
|
||||||
|
sdict.cc
|
||||||
|
sdict.hh
|
||||||
|
searchpanewidget.hh
|
||||||
|
slob.cc
|
||||||
|
slob.hh
|
||||||
|
sounddir.cc
|
||||||
|
sounddir.hh
|
||||||
|
sources.cc
|
||||||
|
sources.hh
|
||||||
|
sphelper.hh
|
||||||
|
splitfile.cc
|
||||||
|
splitfile.hh
|
||||||
|
sptr.hh
|
||||||
|
stardict.cc
|
||||||
|
stardict.hh
|
||||||
|
stylescombobox.cc
|
||||||
|
stylescombobox.hh
|
||||||
|
termination.cc
|
||||||
|
termination.hh
|
||||||
|
thirdparty/qtsingleapplication/src/qtlocalpeer.cpp
|
||||||
|
thirdparty/qtsingleapplication/src/qtlocalpeer.h
|
||||||
|
thirdparty/qtsingleapplication/src/qtsingleapplication.cpp
|
||||||
|
thirdparty/qtsingleapplication/src/qtsingleapplication.h
|
||||||
|
thirdparty/qtsingleapplication/src/qtsinglecoreapplication.cpp
|
||||||
|
thirdparty/qtsingleapplication/src/qtsinglecoreapplication.h
|
||||||
|
tiff.cc
|
||||||
|
tiff.hh
|
||||||
|
translatebox.cc
|
||||||
|
translatebox.hh
|
||||||
|
transliteration.cc
|
||||||
|
transliteration.hh
|
||||||
|
treeview.cc
|
||||||
|
treeview.hh
|
||||||
|
ufile.cc
|
||||||
|
ufile.hh
|
||||||
|
utf8.cc
|
||||||
|
utf8.hh
|
||||||
|
utils.cc
|
||||||
|
utils.hh
|
||||||
|
voiceengines.cc
|
||||||
|
voiceengines.hh
|
||||||
|
webmultimediadownload.cc
|
||||||
|
webmultimediadownload.hh
|
||||||
|
website.cc
|
||||||
|
website.hh
|
||||||
|
weburlrequestinterceptor.cpp
|
||||||
|
weburlrequestinterceptor.h
|
||||||
|
wildcard.cc
|
||||||
|
wildcard.hh
|
||||||
|
wordfinder.cc
|
||||||
|
wordfinder.hh
|
||||||
|
wordlist.cc
|
||||||
|
wordlist.hh
|
||||||
|
wstring.hh
|
||||||
|
wstring_qt.cc
|
||||||
|
wstring_qt.hh
|
||||||
|
xdxf.cc
|
||||||
|
xdxf.hh
|
||||||
|
xdxf2html.cc
|
||||||
|
xdxf2html.hh
|
||||||
|
zim.cc
|
||||||
|
zim.hh
|
||||||
|
zipfile.cc
|
||||||
|
zipfile.hh
|
||||||
|
zipsounds.cc
|
||||||
|
zipsounds.hh
|
||||||
|
)
|
||||||
|
|
||||||
|
qt_add_executable(${CMAKE_PROJECT_NAME}
|
||||||
|
MANUAL_FINALIZATION
|
||||||
|
${PROJECT_SOURCES})
|
||||||
|
|
||||||
|
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
|
||||||
|
${PROJECT_SOURCE_DIR}/thirdparty/qtsingleapplication/src)
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
add_compile_definitions(INCLUDE_LIBRARY_PATH)
|
||||||
|
target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
|
||||||
|
${CMAKE_SOURCE_DIR}/winlibs/include/
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
|
||||||
|
Qt6::Xml
|
||||||
|
Qt6::Concurrent
|
||||||
|
Qt6::Core5Compat
|
||||||
|
Qt6::Help
|
||||||
|
Qt6::Multimedia
|
||||||
|
Qt6::WebEngineWidgets
|
||||||
|
Qt6::Widgets
|
||||||
|
Qt6::Svg
|
||||||
|
)
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE eb)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(UNIX)
|
||||||
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE
|
||||||
|
# pkg-config packages need manually link
|
||||||
|
PkgConfig::PKGCONFIG_DEPS
|
||||||
|
|
||||||
|
BZip2::BZip2
|
||||||
|
ZLIB::ZLIB #hidden requirement of dsl_details.cc and more?
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MSVC)
|
||||||
|
file(GLOB WINLIBS_FILES "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.lib")
|
||||||
|
foreach(A_WIN_LIB ${WINLIBS_FILES})
|
||||||
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${A_WIN_LIB})
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
if(LINUX)
|
||||||
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE libeb X11 PkgConfig::LIBXTST)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${CARBON_LIBRARY})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (WITH_FFMPEG_PLAYER)
|
||||||
|
if (APPLE OR LINUX)
|
||||||
|
target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE PkgConfig::FFMPEG)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set_target_properties(${CMAKE_PROJECT_NAME} PROPERTIES
|
||||||
|
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
|
||||||
|
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
|
||||||
|
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
|
||||||
|
MACOSX_BUNDLE TRUE
|
||||||
|
WIN32_EXECUTABLE TRUE
|
||||||
|
)
|
||||||
|
|
||||||
|
install(TARGETS ${CMAKE_PROJECT_NAME}
|
||||||
|
BUNDLE DESTINATION .
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
|
||||||
|
|
||||||
|
# include all *ts files under locale
|
||||||
|
file(GLOB TRANS_FILES "locale/*.ts")
|
||||||
|
|
||||||
|
# Put generated files to output dir's locale
|
||||||
|
set_source_files_properties(${TRANS_FILES}
|
||||||
|
PROPERTIES OUTPUT_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/locale")
|
||||||
|
|
||||||
|
# a wrapper over qt_add_lupdate and qt_add_lrelease
|
||||||
|
qt_add_translations(${CMAKE_PROJECT_NAME} TS_FILES ${TRANS_FILES}
|
||||||
|
QM_FILES_OUTPUT_VARIABLE qm_files)
|
||||||
|
|
||||||
|
qt_finalize_target(${CMAKE_PROJECT_NAME})
|
||||||
|
|
||||||
|
if (LINUX)
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/redist/org.goldendict.GoldenDict.desktop DESTINATION share/applications)
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/redist/org.goldendict.GoldenDict.metainfo.xml DESTINATION share/metainfo)
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/redist/icons/goldendict.png DESTINATION share/pixmaps)
|
||||||
|
|
||||||
|
install(FILES ${qm_files} DESTINATION share/goldendict/locale)
|
||||||
|
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/help/gdhelp_en.qch DESTINATION share/goldendict/help)
|
||||||
|
install(FILES ${CMAKE_SOURCE_DIR}/help/gdhelp_ru.qch DESTINATION share/goldendict/help)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Copy .dlls to output dir
|
||||||
|
if(MSVC)
|
||||||
|
file(GLOB DLL_FILES LIST_DIRECTORIES false "${CMAKE_SOURCE_DIR}/winlibs/lib/msvc/*.dll")
|
||||||
|
foreach(A_DLL_FILE ${DLL_FILES})
|
||||||
|
get_filename_component(TEMP_VAR_HOLDING_DLL_FILENAME ${A_DLL_FILE} NAME)
|
||||||
|
configure_file("${A_DLL_FILE}" "${CMAKE_BINARY_DIR}/${TEMP_VAR_HOLDING_DLL_FILENAME}" COPYONLY)
|
||||||
|
endforeach()
|
||||||
|
endif()
|
1
eb
Submodule
1
eb
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit cda417343ceedcb4b44e37e54590979f59c748c9
|
38
howto/how to compile with cmake.md
Normal file
38
howto/how to compile with cmake.md
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# Linux
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cmake -S . -B build_dir \
|
||||||
|
--install-prefix=/usr/local/ \
|
||||||
|
-G Ninja \
|
||||||
|
-DCMAKE_BUILD_TYPE=Release
|
||||||
|
|
||||||
|
cmake --build build_dir --parallel 7
|
||||||
|
|
||||||
|
cmake --install ./build_dir/
|
||||||
|
```
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
|
||||||
|
Install necessary dependencies
|
||||||
|
|
||||||
|
```shell
|
||||||
|
brew install pkg-config qt@6 bzip2 zlib \
|
||||||
|
hunspell opencc libvorbis ffmpeg
|
||||||
|
```
|
||||||
|
|
||||||
|
Use standard CMake build commands, then use `macdeployqt ./goldendict.app` to copy necessary dependencies to the app bundle.
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
Install Qt6(msvc) through the standard installer
|
||||||
|
|
||||||
|
Pass those parameters to cmake, the path should be changed to your actual installation paths
|
||||||
|
```
|
||||||
|
-DCMAKE_PREFIX_PATH=F:\Qt\6.4.1\msvc2019_64
|
||||||
|
```
|
||||||
|
|
||||||
|
Use`windeployqt.exe {your_build_dir}/goldendict.exe` which will copy the qt related `.dll` and other necessary files automatically.
|
||||||
|
|
||||||
|
Due to the `winlibs` are built on Release mode, there are troubles to build GoldenDict on Debug mode.
|
|
@ -23,7 +23,10 @@
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#ifndef __WIN32
|
// msvc defines _WIN32 https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros?view=msvc-170
|
||||||
|
// gcc also defines __WIN32, _WIN32, __WIN32__
|
||||||
|
// todo: unify how windows are detected on headers
|
||||||
|
#ifndef _WIN32
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#else
|
#else
|
||||||
#include <winsock.h>
|
#include <winsock.h>
|
||||||
|
|
|
@ -40,6 +40,10 @@
|
||||||
|
|
||||||
#include "qtlockedfile.h"
|
#include "qtlockedfile.h"
|
||||||
|
|
||||||
|
#ifdef CMAKE_USED_HACK
|
||||||
|
using namespace QtLP_Private;
|
||||||
|
#endif
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\class QtLockedFile
|
\class QtLockedFile
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,10 @@
|
||||||
|
|
||||||
#include "qtlockedfile.h"
|
#include "qtlockedfile.h"
|
||||||
|
|
||||||
|
#ifdef CMAKE_USED_HACK
|
||||||
|
using namespace QtLP_Private;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool QtLockedFile::lock(LockMode mode, bool block)
|
bool QtLockedFile::lock(LockMode mode, bool block)
|
||||||
{
|
{
|
||||||
if (!isOpen()) {
|
if (!isOpen()) {
|
||||||
|
|
1
version.txt.in
Normal file
1
version.txt.in
Normal file
|
@ -0,0 +1 @@
|
||||||
|
${PROJECT_VERSION}.${GIT_HASH} on ${date_for_version_file}
|
Loading…
Reference in a new issue