Browse Source

cmake: fix Qt resources linkage. Closes #5080

Qt resource is innitialized by a static object constructor (see
https://wiki.qt.io/QtResources). When we put resources into a static
library, the linker removes that static objects and thus the resources
themselves. To correct that we append resources to the main executable
sources list. This is done via custom function qbt_target_sources which
knows where to read the executable' name.
adaptive-webui-19844
Eugene Shalygin 9 years ago
parent
commit
f050f15a0c
  1. 17
      cmake/Modules/QbtTargetSources.cmake
  2. 11
      src/CMakeLists.txt
  3. 5
      src/app/CMakeLists.txt
  4. 5
      src/gui/CMakeLists.txt
  5. 4
      src/gui/lineedit/CMakeLists.txt
  6. 5
      src/webui/CMakeLists.txt

17
cmake/Modules/QbtTargetSources.cmake

@ -0,0 +1,17 @@
# a helper function which appends source to the main qBt target
# the target name is read from QBT_TARGET_NAME variable
# sources file names are relative to the the ${qbt_executable_SOURCE_DIR}
function (qbt_target_sources)
set (_sources_rel "")
foreach (_source IN ITEMS ${ARGN})
if (IS_ABSOLUTE "${_source}")
set(source_abs "${_source}")
else()
get_filename_component(_source_abs "${_source}" ABSOLUTE)
endif()
file (RELATIVE_PATH _source_rel "${qbt_executable_SOURCE_DIR}" "${_source_abs}")
list (APPEND _sources_rel "${_source_rel}")
endforeach()
target_sources (${QBT_TARGET_NAME} PRIVATE "${_sources_rel}")
endfunction (qbt_target_sources)

11
src/CMakeLists.txt

@ -3,6 +3,7 @@ set(CMAKE_CXX_STANDARD "11")
add_definitions(-DBOOST_NO_CXX11_RVALUE_REFERENCES) add_definitions(-DBOOST_NO_CXX11_RVALUE_REFERENCES)
include(MacroLinkQtComponents) include(MacroLinkQtComponents)
include(QbtTargetSources)
find_package(LibtorrentRasterbar REQUIRED) find_package(LibtorrentRasterbar REQUIRED)
include_directories(SYSTEM ${LibtorrentRasterbar_INCLUDE_DIRS}) include_directories(SYSTEM ${LibtorrentRasterbar_INCLUDE_DIRS})
@ -88,8 +89,12 @@ set(QBT_USES_QT5 ${QT5})
configure_file(config.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/config.h) configure_file(config.h.cmakein ${CMAKE_CURRENT_BINARY_DIR}/config.h)
if (GUI)
set(QBT_TARGET_NAME qbittorrent)
else (GUI)
set(QBT_TARGET_NAME qbittorrent-nox)
endif (GUI)
add_subdirectory(base)
if (SYSTEM_QTSINGLEAPPLICATION) if (SYSTEM_QTSINGLEAPPLICATION)
find_package(QtSingleApplication REQUIRED) find_package(QtSingleApplication REQUIRED)
@ -98,6 +103,9 @@ else (SYSTEM_QTSINGLEAPPLICATION)
include_directories(app/qtsingleapplication) include_directories(app/qtsingleapplication)
endif (SYSTEM_QTSINGLEAPPLICATION) endif (SYSTEM_QTSINGLEAPPLICATION)
add_subdirectory(app)
add_subdirectory(base)
if (GUI) if (GUI)
add_subdirectory(gui) add_subdirectory(gui)
endif (GUI) endif (GUI)
@ -106,4 +114,3 @@ if (WEBUI)
add_subdirectory(webui) add_subdirectory(webui)
endif (WEBUI) endif (WEBUI)
add_subdirectory(app)

5
src/app/CMakeLists.txt

@ -1,3 +1,4 @@
project(qbt_executable)
include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${CMAKE_CURRENT_BINARY_DIR})
set(QBT_APP_HEADERS set(QBT_APP_HEADERS
@ -86,13 +87,10 @@ list(APPEND QBT_APP_HEADERS upgrade.h)
list(APPEND QBT_TARGET_LIBRARIES qbt_base) list(APPEND QBT_TARGET_LIBRARIES qbt_base)
if (GUI) if (GUI)
set(QBT_TARGET_NAME qbittorrent)
list(APPEND QBT_TARGET_LIBRARIES qbt_searchengine qbt_gui) list(APPEND QBT_TARGET_LIBRARIES qbt_searchengine qbt_gui)
include_directories(../gui include_directories(../gui
${CMAKE_CURRENT_BINARY_DIR}/../gui ${CMAKE_CURRENT_BINARY_DIR}/../gui
) )
else (GUI)
set(QBT_TARGET_NAME qbittorrent-nox)
endif (GUI) endif (GUI)
if (WEBUI) if (WEBUI)
@ -152,6 +150,7 @@ add_executable(${QBT_TARGET_NAME} ${QBT_APP_HEADERS} ${QBT_APP_SOURCES} ${QBT_QM
set_target_properties(${QBT_TARGET_NAME} set_target_properties(${QBT_TARGET_NAME}
PROPERTIES PROPERTIES
AUTOUIC True AUTOUIC True
AUTORCC True
MACOSX_BUNDLE True MACOSX_BUNDLE True
) )

5
src/gui/CMakeLists.txt

@ -8,6 +8,7 @@ add_subdirectory(properties)
add_subdirectory(powermanagement) add_subdirectory(powermanagement)
add_subdirectory(rss) add_subdirectory(rss)
add_subdirectory(search) add_subdirectory(search)
if (UNIX AND NOT APPLE AND DBUS) if (UNIX AND NOT APPLE AND DBUS)
add_subdirectory(qtnotify) add_subdirectory(qtnotify)
include_directories(qtnotify) include_directories(qtnotify)
@ -127,7 +128,7 @@ options.ui
torrentcreatordlg.ui torrentcreatordlg.ui
) )
set(QBT_GUI_RESOURCES about.qrc) qbt_target_sources(about.qrc)
add_library(qbt_gui STATIC ${QBT_GUI_HEADERS} ${QBT_GUI_SOURCES} ${QBT_GUI_RESOURCES}) add_library(qbt_gui STATIC ${QBT_GUI_HEADERS} ${QBT_GUI_SOURCES})
target_link_libraries(qbt_gui qbt_lineedit qbt_powermanagement qbt_rss qbt_properties qbt_searchengine ${QBT_GUI_OPTIONAL_LINK_LIBRARIES} qbt_base) target_link_libraries(qbt_gui qbt_lineedit qbt_powermanagement qbt_rss qbt_properties qbt_searchengine ${QBT_GUI_OPTIONAL_LINK_LIBRARIES} qbt_base)

4
src/gui/lineedit/CMakeLists.txt

@ -10,9 +10,11 @@ set(QBT_LINEEDIT_RESOURCES
resources/lineeditimages.qrc resources/lineeditimages.qrc
) )
add_library(qbt_lineedit STATIC ${QBT_LINEEDIT_SOURCES} ${QBT_LINEEDIT_HEADERS} ${QBT_LINEEDIT_RESOURCES}) add_library(qbt_lineedit STATIC ${QBT_LINEEDIT_SOURCES} ${QBT_LINEEDIT_HEADERS})
if (QT4_FOUND) if (QT4_FOUND)
target_link_libraries(qbt_lineedit Qt4::QtGui) target_link_libraries(qbt_lineedit Qt4::QtGui)
else (QT4_FOUND) else (QT4_FOUND)
target_link_libraries(qbt_lineedit Qt5::Widgets) target_link_libraries(qbt_lineedit Qt5::Widgets)
endif (QT4_FOUND) endif (QT4_FOUND)
qbt_target_sources(${QBT_LINEEDIT_RESOURCES})

5
src/webui/CMakeLists.txt

@ -26,8 +26,9 @@ if (QT4_FOUND)
endif(NOT SYSTEM_QJSON) endif(NOT SYSTEM_QJSON)
endif (QT4_FOUND) endif (QT4_FOUND)
set(QBT_WEBUI_RESOURCES webui.qrc) qbt_target_sources(webui.qrc)
add_library(qbt_webui STATIC ${QBT_WEBUI_HEADERS} ${QBT_WEBUI_SOURCES} ${QBT_WEBUI_RESOURCES})
add_library(qbt_webui STATIC ${QBT_WEBUI_HEADERS} ${QBT_WEBUI_SOURCES})
target_link_libraries(qbt_webui qbt_base) target_link_libraries(qbt_webui qbt_base)
if (QT4_FOUND) if (QT4_FOUND)

Loading…
Cancel
Save