CMake refactoring

This commit is contained in:
2020-09-04 22:32:05 +03:00
parent 93caa5cc5d
commit c350c61e36
3 changed files with 519 additions and 82 deletions

166
SHSTKQtMacros.cmake Normal file
View File

@@ -0,0 +1,166 @@
#[[
shstk_qt_install(dir is_app target h_files qm_files)
shstk_qt_plugin(name modules libs)
shstk_qt_project(name is_app domain modules libs)
]]
set(_ok TRUE)
if (NOT BUILDING_qad)
include(SHSTKMacros)
include(QtWraps)
find_qt(Core QUIET)
find_package(QAD REQUIRED)
set(_ok ${QAD_FOUND})
endif()
if (_ok)
macro(shstk_qt_founded _out)
find_qt(Core QUIET)
set(${_out})
foreach(_v ${_QT_VERSIONS_})
#message("Qt${_v} -> ${LOCAL_FOUND${_v}}")
if (LOCAL_FOUND${_v})
list(APPEND ${_out} Qt${_v})
endif()
endforeach()
endmacro()
macro(shstk_qt_install _dir is_app _target _h_files _qm_files)
#message("QM=${_qm_files}")
if((NOT ${is_app}) AND (NOT "x${_h_files}" STREQUAL "x"))
if(LOCAL)
install(FILES ${_h_files} DESTINATION include/${_dir})
else()
if(WIN32)
install(FILES ${_h_files} DESTINATION ${MINGW_INCLUDE}/${_dir})
else()
install(FILES ${_h_files} DESTINATION ${CMAKE_INSTALL_PREFIX}/include/${_dir})
endif()
endif()
endif()
if (NOT "x${_target}" STREQUAL "x")
if(LOCAL)
if(${is_app})
qt_install(TARGETS ${_target} DESTINATION bin)
else()
if(WIN32)
qt_install(TARGETS ${_target} RUNTIME DESTINATION bin)
qt_install(TARGETS ${_target} ARCHIVE DESTINATION lib)
else()
qt_install(TARGETS ${_target} DESTINATION lib)
endif()
endif()
if(NOT "x${_qm_files}" STREQUAL "x")
qt_install(LANG ${_qm_files} DESTINATION lang)
endif()
else()
if(WIN32)
if (${is_app})
qt_install(TARGETS ${_target} DESTINATION ${MINGW_BIN})
qt_install(TARGETS ${_target} DESTINATION QtBin)
else()
qt_install(TARGETS ${_target} ARCHIVE DESTINATION ${MINGW_LIB})
qt_install(TARGETS ${_target} RUNTIME DESTINATION ${MINGW_BIN})
qt_install(TARGETS ${_target} RUNTIME DESTINATION QtBin)
endif()
else()
if (${is_app})
qt_install(TARGETS ${_target} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
else()
qt_install(TARGETS ${_target} DESTINATION ${CMAKE_INSTALL_PREFIX}/lib)
endif()
endif()
if(NOT "x${_qm_files}" STREQUAL "x")
qt_install(LANG ${_qm_files} DESTINATION QtLang)
endif()
endif()
endif()
endmacro()
macro(shstk_qt_plugin NAME _MODULES _LIBS)
if (NOT STATIC_LIB)
if(DESIGNER_PLUGINS)
set(PROJ_NAME ${NAME}_plugin)
include_directories("..")
add_definitions(-DQT_PLUGIN)
add_definitions(-DQT_NO_DEBUG)
add_definitions(-DQT_SHARED)
add_definitions(-DQDESIGNER_EXPORT_WIDGETS)
find_qt(${QtVersions} Core Designer ${_MODULES})
qt_sources(SRC)
qt_wrap(${SRC} CPPS out_CPP QMS out_QM)
qt_add_library(${PROJ_NAME} SHARED out_CPP)
qt_target_link_libraries(${PROJ_NAME} ${_LIBS} ${_${NAME}_PLUGIN_LIBS})
if (WIN32)
qt_install(TARGETS ${PROJ_NAME} RUNTIME DESTINATION QtPlugins/designer)
else()
qt_install(TARGETS ${PROJ_NAME} DESTINATION QtPlugins/designer)
endif()
list(APPEND _qt_plugs ${NAME})
shstk_copy_to_parent()
endif()
endif()
endmacro()
macro(shstk_qt_project NAME IS_APP DOMAIN _MODULES _LIBS)
project(${NAME})
#message("find_qt ${NAME} \"${QtVersions}\" \"${_MODULES}\"")
find_qt(${QtVersions} Core ${_MODULES})
qt_sources(SRC)
import_version(${PROJECT_NAME} ${DOMAIN})
import_deploy_properties(${PROJECT_NAME} ${DOMAIN})
if (${IS_APP})
list(APPEND _qt_apps ${PROJECT_NAME})
set_deploy_property(${PROJECT_NAME}
LABEL ${PROJECT_NAME}
FULLNAME "${${DOMAIN}_DOMAIN}.${PROJECT_NAME}"
INFO "${APP_INFO}"
ICON "${APP_ICON}")
else()
list(APPEND _qt_libs ${PROJECT_NAME})
set_deploy_property(${PROJECT_NAME} SHARED
LABEL ${PROJECT_NAME}
FULLNAME "${${DOMAIN}_DOMAIN}.${PROJECT_NAME}"
INFO "${DOMAIN} ${NAME} library")
endif()
make_rc(${PROJECT_NAME} out_RC)
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM ${out_RC})
if (${IS_APP})
qt_add_executable(${PROJECT_NAME} WIN32 out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN})
else()
set(_libtype SHARED)
if (NOT "x${${DOMAIN}_LIB_TYPE}" STREQUAL "x")
set(_libtype ${${DOMAIN}_LIB_TYPE})
endif()
qt_add_library(${PROJECT_NAME} ${_libtype} out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN})
#if(NOT ${DOMAIN}_STATIC_LIB)
# qt_target_compile_definitions(${PROJECT_NAME} PRIVATE ${DOMAIN}_SHARED_DEFINE)
#endif()
qt_generate_export_header(${PROJECT_NAME})
list(APPEND out_HDR "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h")
list(APPEND QT_MULTILIB_LIST ${PROJECT_NAME})
#message("${QT_MULTILIB_LIST}")
#set(QT_MULTILIB_LIST "${QT_MULTILIB_LIST}" CACHE STRING "")
endif()
qt_target_link_libraries(${PROJECT_NAME} ${_LIBS})
#message(STATUS "Building ${PROJECT_NAME}")
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/plugin")
set(_${NAME}_PLUGIN_LIBS "${_LIBS}")
add_subdirectory(plugin)
endif()
shstk_copy_to_parent()
endmacro()
endif()