CMake refactoring
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
#[[
|
||||
|
||||
Also create imported targets:
|
||||
Create imported targets:
|
||||
* QAD::Utils
|
||||
* QAD::Widgets
|
||||
* QAD::Application
|
||||
@@ -9,6 +9,8 @@ Also create imported targets:
|
||||
* QAD::SQLTable
|
||||
* QAD::TouchWidgets
|
||||
* QAD::Doc
|
||||
* QAD::PIQt
|
||||
* QAD::PIQtUtils
|
||||
|
||||
These targets include directories and dependencies
|
||||
|
||||
@@ -16,157 +18,124 @@ These targets include directories and dependencies
|
||||
|
||||
cmake_policy(SET CMP0011 NEW) # don`t affect includer policies
|
||||
cmake_policy(SET CMP0020 NEW) # Automatically link Qt executables to qtmain target on Windows
|
||||
if(NOT LIBPROJECT)
|
||||
if(NOT BUILDING_qad)
|
||||
find_package(PIP QUIET)
|
||||
include(QtWraps)
|
||||
include(SHSTKMacros)
|
||||
endif()
|
||||
get_directory_property(hasParent PARENT_DIRECTORY)
|
||||
|
||||
shstk_is_parent_exists(hasParent PARENT_DIRECTORY)
|
||||
set(_SEARCH_DIR)
|
||||
if(WIN32)
|
||||
find_package(MinGW REQUIRED)
|
||||
endif()
|
||||
set(_QAD_INCDIR)
|
||||
set(_QAD_LIBDIR)
|
||||
if(MINGW_INCLUDE)
|
||||
list(APPEND _QAD_INCDIR "${MINGW_INCLUDE}/qad")
|
||||
list(APPEND _QAD_LIBDIR "${MINGW_LIB}")
|
||||
endif()
|
||||
if(CMAKE_CROSSCOMPILING)
|
||||
list(APPEND _QAD_INCDIR "${CMAKE_PREFIX_PATH}/include/qad")
|
||||
list(APPEND _QAD_LIBDIR "${CMAKE_PREFIX_PATH}/lib")
|
||||
|
||||
shstk_set_find_dirs(qad)
|
||||
|
||||
if (NOT BUILDING_qad)
|
||||
|
||||
find_file(QAD_H_INCLUDE "qad_types.h" HINTS ${PIP_DIR}/include/qad ${qad_INCDIR} $ENV{SMSDK_DIR}/include/qad)
|
||||
#if (DEFINED ANDROID_PLATFORM)
|
||||
# list(APPEND _PIP_INCDIR ${CMAKE_PREFIX_PATH}/include/qad)
|
||||
# list(APPEND _PIP_LIBDIR ${CMAKE_PREFIX_PATH}/lib)
|
||||
# set(QAD_INCLUDES ${ANDROID_SYSTEM_LIBRARY_PATH}/usr/include/qad)
|
||||
#else()
|
||||
get_filename_component(QAD_INCLUDES ${QAD_H_INCLUDE} PATH)
|
||||
#endif()
|
||||
include_directories(${CMAKE_PREFIX_PATH}/include)
|
||||
link_directories(${CMAKE_PREFIX_PATH}/lib)
|
||||
else()
|
||||
if(NOT WIN32)
|
||||
list(APPEND _QAD_INCDIR "/usr/include/qad" "/usr/local/include/qad")
|
||||
list(APPEND _QAD_LIBDIR "/usr/lib" "/usr/local/lib")
|
||||
endif()
|
||||
if(APPLE)
|
||||
include_directories(/usr/local/include)
|
||||
link_directories(/usr/local/lib)
|
||||
endif()
|
||||
set(_SEARCH_DIR ${qad_LIBDIR} $ENV{SMSDK_DIR}/lib)
|
||||
shstk_find_header(QAD "qad_version.h" "")
|
||||
|
||||
endif()
|
||||
find_file(QAD_H_INCLUDE "qad_types.h" HINTS ${PIP_DIR}/include/qad ${_QAD_INCDIR} $ENV{SMSDK_DIR}/include/qad)
|
||||
#if (DEFINED ANDROID_PLATFORM)
|
||||
# set(QAD_INCLUDES ${ANDROID_SYSTEM_LIBRARY_PATH}/usr/include/qad)
|
||||
#else()
|
||||
get_filename_component(QAD_INCLUDES ${QAD_H_INCLUDE} PATH)
|
||||
#endif()
|
||||
set(_SEARCH_DIR ${_QAD_LIBDIR} $ENV{SMSDK_DIR}/lib)
|
||||
set(_QAD_LIBS utils widgets application blockview graphic sql_table touch_widgets doc)
|
||||
|
||||
set(_ITN_utils "Utils" )
|
||||
set(_ITN_widgets "Widgets" )
|
||||
set(_ITN_application "Application" )
|
||||
set(_ITN_blockview "Blockview" )
|
||||
set(_ITN_graphic "Graphic" )
|
||||
set(_ITN_sql_table "SQLTable" )
|
||||
set(_ITN_touch_widgets "TouchWidgets")
|
||||
set(_ITN_doc "Doc" )
|
||||
|
||||
set(_ITLL_widgets "QAD::Utils")
|
||||
set(_ITLL_application "QAD::Widgets")
|
||||
set(_ITLL_blockview "QAD::Widgets")
|
||||
set(_ITLL_graphic "QAD::Widgets")
|
||||
set(_ITLL_sql_table "QAD::Widgets")
|
||||
set(_ITLL_touch_widgets "")
|
||||
set(_ITLL_doc "")
|
||||
|
||||
if(LIBPROJECT)
|
||||
set(QAD_INCLUDES ${QAD_DIR})
|
||||
if(QAD_FIND_VERSION VERSION_GREATER QAD_VERSION)
|
||||
message(FATAL_ERROR "QAD version ${QAD_VERSION} is available, but ${QAD_FIND_VERSION} requested!")
|
||||
endif()
|
||||
foreach(_Q ${_QAD_LIBS})
|
||||
string(TOUPPER ${_Q} _QU)
|
||||
if(LIBPROJECT)
|
||||
set(QAD_${_QU}_LIBRARY qad_${_Q})
|
||||
list(APPEND QAD_INCLUDES ${QAD_DIR}/${_Q})
|
||||
else()
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
find_library(QAD${_v}_${_QU}_LIBRARY qad_${_Q}${_v} HINTS ${_SEARCH_DIR})
|
||||
set(MULTILIB_qad_${_Q}_SUFFIX_Qt${_v} ${_v})
|
||||
if(hasParent)
|
||||
set(MULTILIB_qad_${_Q}_SUFFIX_Qt${_v} ${_v} PARENT_SCOPE)
|
||||
endif()
|
||||
#message(STATUS "MULTILIB_qad_${_Q}_SUFFIX_Qt${_v} = ${_v}")
|
||||
|
||||
set(__libs "utils;widgets;application;blockview;graphic;sql_table;touch_widgets;doc")
|
||||
if (PIP_FOUND OR BUILDING_pip)
|
||||
list(APPEND __libs "piqt;piqt_utils")
|
||||
endif()
|
||||
|
||||
set(__module_utils Utils )
|
||||
set(__module_widgets Widgets )
|
||||
set(__module_application Application )
|
||||
set(__module_blockview Blockview )
|
||||
set(__module_graphic Graphic )
|
||||
set(__module_sql_table SQLTable )
|
||||
set(__module_touch_widgets TouchWidgets )
|
||||
set(__module_doc Doc )
|
||||
set(__module_piqt PIQt )
|
||||
set(__module_piqt_utils PIQtUtils )
|
||||
|
||||
foreach (_l ${__libs})
|
||||
set( __inc_${_l} "")
|
||||
set(__deps_${_l} "")
|
||||
set(__libs_${_l} "")
|
||||
endforeach()
|
||||
|
||||
set(__deps_widgets "QAD::Utils")
|
||||
set(__deps_application "QAD::Widgets")
|
||||
set(__deps_blockview "QAD::Widgets")
|
||||
set(__deps_graphic "QAD::Widgets")
|
||||
set(__deps_sql_table "QAD::Widgets")
|
||||
set(__deps_piqt "QAD::Widgets;PIP")
|
||||
set(__deps_piqt_utils "QAD::Blockview;QAD::PIQt")
|
||||
|
||||
#message("find QAD ${BUILDING_qad}")
|
||||
|
||||
if (BUILDING_qad)
|
||||
|
||||
if (NOT SET_TARGETS_qad)
|
||||
set(SET_TARGETS_qad ON CACHE BOOL "")
|
||||
#message("create aliases")
|
||||
foreach(_l ${__libs})
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
set(_m ${__module_${_l}})
|
||||
string(REPLACE ":" "_" _m_str "${_m}")
|
||||
if((NOT TARGET QAD::${_m}${_v}) AND TARGET qad_${_l}${_v})
|
||||
#message("alias QAD::${_m}${_v} = qad_${_l}${_v}")
|
||||
set(MULTILIB_qad_${_l}_SUFFIX_Qt${_v} ${_v} CACHE STRING "")
|
||||
add_library(QAD::${_m}${_v} ALIAS qad_${_l}${_v})
|
||||
endif()
|
||||
endforeach()
|
||||
list(APPEND QT_MULTILIB_LIST QAD::${_m})
|
||||
endforeach()
|
||||
endif()
|
||||
#message(STATUS "Library qad_${_Q}5 (${_QU}) -> ${QAD5_${_QU}_LIBRARY} found in ${_SEARCH_DIR}")
|
||||
list(APPEND QT_MULTILIB_LIST qad_${_Q})
|
||||
endforeach()
|
||||
|
||||
set(QAD_FOUND ON CACHE BOOL "")
|
||||
|
||||
set(_PIQT_LIBS piqt piqt_utils)
|
||||
foreach(_Q ${_PIQT_LIBS})
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
set(MULTILIB_${_Q}_SUFFIX_Qt${_v} ${_v})
|
||||
if(hasParent)
|
||||
set(MULTILIB_${_Q}_SUFFIX_Qt${_v} ${_v} PARENT_SCOPE)
|
||||
endif()
|
||||
#message(STATUS "MULTILIB_${_Q}_SUFFIX_Qt${_v} = ${_v}")
|
||||
endforeach()
|
||||
#message(STATUS "Library ${_Q}5 (${_QU}) -> ${QAD5_${_QU}_LIBRARY} found in ${_SEARCH_DIR}")
|
||||
list(APPEND QT_MULTILIB_LIST ${_Q})
|
||||
endforeach()
|
||||
else()
|
||||
|
||||
foreach(_Q ${_QAD_LIBS})
|
||||
string(TOUPPER ${_Q} _QU)
|
||||
set(_target QAD::${_ITN_${_Q}})
|
||||
string(REPLACE ":" "_" _target_str "${_target}")
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
if(NOT TARGET ${_target}${_v})
|
||||
set(_link_list)
|
||||
foreach(_l ${_ITLL_${_Q}})
|
||||
list(APPEND _link_list ${_l}${_v})
|
||||
endforeach()
|
||||
add_library(${_target}${_v} UNKNOWN IMPORTED)
|
||||
set_target_properties(${_target}${_v} PROPERTIES
|
||||
IMPORTED_LOCATION "${QAD${_v}_${_QU}_LIBRARY}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${QAD_INCLUDES}"
|
||||
INTERFACE_LINK_LIBRARIES "${_link_list}")
|
||||
set(MULTILIB_${_target_str}_SUFFIX_Qt${_v} ${_v})
|
||||
if(hasParent)
|
||||
set(MULTILIB_${_target_str}_SUFFIX_Qt${_v} ${_v} PARENT_SCOPE)
|
||||
#message("create interfaces")
|
||||
foreach(_l ${__libs})
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
set(_m ${__module_${_l}})
|
||||
string(REPLACE ":" "_" _m_str "${_m}")
|
||||
find_library(QAD_LIBRARY_${_l}${_v} qad_${_l}${_v} HINTS ${qad_LIBDIR})
|
||||
#message("found ${_l}${_v} = ${QAD_LIBRARY_${_l}${_v}}")
|
||||
if((NOT TARGET QAD::${_m}${_v}) AND QAD_LIBRARY_${_l}${_v})
|
||||
#message("imported QAD::${_m}${_v} = ${QAD_LIBRARY_${_l}${_v}}")
|
||||
set(MULTILIB_qad_${_l}_SUFFIX_Qt${_v} ${_v} CACHE STRING "")
|
||||
add_library(QAD::${_m}${_v} UNKNOWN IMPORTED)
|
||||
set(_deps)
|
||||
foreach (_d ${__deps_${_l}})
|
||||
if (${_d} MATCHES "QAD::*")
|
||||
list(APPEND _deps ${_d}${_v})
|
||||
else()
|
||||
list(APPEND _deps ${_d})
|
||||
endif()
|
||||
endforeach()
|
||||
set_target_properties(QAD::${_m}${_v} PROPERTIES
|
||||
IMPORTED_LOCATION "${QAD_LIBRARY_${_l}${_v}}"
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${QAD_INCLUDES}"
|
||||
INTERFACE_LINK_LIBRARIES "${_deps}")
|
||||
endif()
|
||||
#message(STATUS "add imported ${_target}${_v}")
|
||||
#message(STATUS "add MULTILIB MULTILIB_${_target_str}_SUFFIX_Qt${_v} ${_v}")
|
||||
endif()
|
||||
endforeach()
|
||||
list(APPEND QT_MULTILIB_LIST QAD::${_m})
|
||||
endforeach()
|
||||
list(APPEND QT_MULTILIB_LIST ${_target})
|
||||
endforeach()
|
||||
list(APPEND QT_MULTILIB_LIST qglview qglengine_core qglengine_widgets)
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
find_library(QGLVIEW${_v}_LIBRARY qglview${_v} ${_SEARCH_DIR})
|
||||
set(MULTILIB_qglview_SUFFIX_Qt${_v} ${_v})
|
||||
if(hasParent)
|
||||
set(MULTILIB_qglview_SUFFIX_Qt${_v} ${_v} PARENT_SCOPE)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
endif()
|
||||
|
||||
if(hasParent)
|
||||
set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE)
|
||||
endif()
|
||||
|
||||
if(NOT LIBPROJECT)
|
||||
if(NOT QAD_VERSION)
|
||||
include(CheckSymbolExists)
|
||||
check_symbol_exists(QAD_VERSION_NAME "${QAD_INCLUDES}/qad_version.h" HAVE_QAD_VERSION)
|
||||
if (HAVE_QAD_VERSION)
|
||||
file(STRINGS "${QAD_INCLUDES}/qad_version.h" _VERSION REGEX "^[ \t]*#define[ \t]+QAD_VERSION_NAME+[ \t]+.*$")
|
||||
string(REGEX MATCH "\".*\"" _VERSION ${_VERSION})
|
||||
string(LENGTH ${_VERSION} SL)
|
||||
math(EXPR SL ${SL}-2)
|
||||
string(SUBSTRING ${_VERSION} 1 ${SL} _VERSION)
|
||||
set(QAD_VERSION ${_VERSION} CACHE STRING "VERSION")
|
||||
else()
|
||||
message(FATAL_ERROR "Can`t find QAD version file!")
|
||||
endif()
|
||||
endif()
|
||||
if(QAD_FIND_VERSION VERSION_GREATER QAD_VERSION)
|
||||
message(FATAL_ERROR "QAD version ${QAD_VERSION} is available, but ${QAD_FIND_VERSION} requested!")
|
||||
endif()
|
||||
if (NOT _QAD_MSG)
|
||||
set(_QAD_MSG 1 CACHE BOOL "msg_qad" FORCE)
|
||||
message(STATUS "Found QAD (version \"${QAD_VERSION}\")")
|
||||
endif()
|
||||
endif()
|
||||
set(QAD_FOUND ON CACHE BOOL "")
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
|
||||
macro(_qt_install _TARGET IS_APP _DIR _HDR_VAR _QM_FILES)
|
||||
sdk_install("${_DIR}" ${IS_APP} "${_TARGET}" "${${_HDR_VAR}}" "${_QM_FILES}")
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(_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})
|
||||
copy_to_parent("")
|
||||
endif()
|
||||
endif()
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(_qt_project NAME IS_APP DOMAIN _MODULES _LIBS)
|
||||
set(PROJ_NAME ${NAME})
|
||||
find_qt(${QtVersions} Core ${_MODULES})
|
||||
qt_sources(SRC)
|
||||
import_version(${PROJ_NAME} ${DOMAIN})
|
||||
import_deploy_properties(${PROJ_NAME} ${DOMAIN})
|
||||
if (${IS_APP})
|
||||
list(APPEND _qt_apps ${PROJ_NAME})
|
||||
set_deploy_property(${PROJ_NAME}
|
||||
LABEL ${PROJ_NAME}
|
||||
FULLNAME "${_${DOMAIN}_DOMAIN}.${PROJ_NAME}"
|
||||
INFO "${APP_INFO}"
|
||||
ICON "${APP_ICON}")
|
||||
else()
|
||||
list(APPEND _qt_libs ${PROJ_NAME})
|
||||
set_deploy_property(${PROJ_NAME} SHARED
|
||||
LABEL ${PROJ_NAME}
|
||||
FULLNAME "${_${DOMAIN}_DOMAIN}.${PROJ_NAME}"
|
||||
INFO "${DOMAIN} ${NAME} library")
|
||||
endif()
|
||||
make_rc(${PROJ_NAME} out_RC)
|
||||
qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM ${out_RC})
|
||||
if (${IS_APP})
|
||||
qt_add_executable(${PROJ_NAME} WIN32 out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN})
|
||||
else()
|
||||
qt_add_library(${PROJ_NAME} ${${DOMAIN}_LIB_TYPE} out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN})
|
||||
if(NOT STATIC_LIB)
|
||||
qt_target_compile_definitions(${PROJ_NAME} PRIVATE ${DOMAIN}_SHARED_DEFINE)
|
||||
endif()
|
||||
qt_generate_export_header(${PROJ_NAME})
|
||||
list(APPEND out_HDR "${CMAKE_CURRENT_BINARY_DIR}/${PROJ_NAME}_export.h")
|
||||
endif()
|
||||
qt_target_link_libraries(${PROJ_NAME} ${_LIBS})
|
||||
list(APPEND QT_MULTILIB_LIST ${PROJ_NAME})
|
||||
#message(STATUS "Building ${PROJ_NAME}")
|
||||
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/plugin")
|
||||
set(_${NAME}_PLUGIN_LIBS "${_LIBS}")
|
||||
add_subdirectory(plugin)
|
||||
endif()
|
||||
copy_to_parent("")
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(qad_library NAME _MODULES _LIBS)
|
||||
_qt_project(qad_${NAME} FALSE "QAD" "${_MODULES}" "${_LIBS}")
|
||||
_qt_install(qad_${NAME} FALSE "qad" "out_HDR" "out_QM")
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(qad_application NAME _MODULES _LIBS)
|
||||
_qt_project(${NAME} TRUE "QAD" "${_MODULES}" "${_LIBS}")
|
||||
_qt_install(${NAME} TRUE "qad" "" "out_QM")
|
||||
endmacro()
|
||||
|
||||
|
||||
macro(qad_plugin NAME _MODULES _LIBS)
|
||||
_qt_plugin(qad_${NAME} "${_MODULES}" "qad_${NAME};${_LIBS}")
|
||||
endmacro()
|
||||
@@ -8,6 +8,7 @@ If Qt4/5 found, set
|
||||
* Qt<4/5>_BIN var to Qt binary dir
|
||||
* Qt<4/5>_PLUGINS_DIR var to Qt plugins dir
|
||||
* Qt<4/5>_LANG_DIR var to Qt translations dir
|
||||
Also set variable SOME_QT_FOUND
|
||||
|
||||
|
||||
|
||||
@@ -166,6 +167,9 @@ macro(find_qt)
|
||||
set(Qt${_v}_PLUGINS_DIR)
|
||||
set(Qt${_v}_LANG_DIR)
|
||||
endforeach()
|
||||
if (NOT DEFINED SOME_QT_FOUND)
|
||||
set(SOME_QT_FOUND 0 CACHE BOOL "")
|
||||
endif()
|
||||
set(_NEED_SOME 0)
|
||||
set(_QUIET)
|
||||
foreach(_i ${ARGN})
|
||||
@@ -270,6 +274,7 @@ macro(find_qt)
|
||||
endif()
|
||||
foreach(_v ${_QT_VERSIONS_})
|
||||
if (LOCAL_FOUND${_v})
|
||||
set(SOME_QT_FOUND 1 CACHE BOOL "" FORCE)
|
||||
foreach(_p ${Qt${_v}_INCLUDES})
|
||||
list(APPEND MOC_INC_Qt${_v} "-I${_p}")
|
||||
#message("${_p}")
|
||||
@@ -534,7 +539,8 @@ macro(qt_add_library _NAME)
|
||||
set(_TARGET ${_NAME}${TARGET_SUFFIX_Qt${_v}})
|
||||
add_library(${_TARGET} ${_PREF} ${_ARGS})
|
||||
set(_${_NAME}_is_qt 1)
|
||||
target_include_directories(${_TARGET} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}/qt${_v} ${Qt${_v}_INCLUDES})
|
||||
target_include_directories(${_TARGET} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/qt${_v})
|
||||
target_include_directories(${_TARGET} PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${Qt${_v}_INCLUDES})
|
||||
__qt_set_defines(${_NAME} ${_TARGET})
|
||||
#message("add lib: \"${_TARGET}\"")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user