From 236de603e5bddae5e9a9782eae4d82905954375a Mon Sep 17 00:00:00 2001 From: Ivan Pelipenko Date: Sun, 6 Sep 2020 21:46:22 +0300 Subject: [PATCH] Windows works --- CMakeLists.txt | 48 +++++++++++------- cmake/FindQGLEngine.cmake | 103 ++++++++++++++++++++++++++++++++++++++ core/gltypes.h | 1 + core/qglengine_version.h | 27 ---------- widgets/CMakeLists.txt | 16 +++--- 5 files changed, 142 insertions(+), 53 deletions(-) create mode 100644 cmake/FindQGLEngine.cmake delete mode 100644 core/qglengine_version.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d852ec4..0148d16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,20 +1,25 @@ cmake_minimum_required(VERSION 3.0) project(qglengine) find_package(QAD REQUIRED) -set(_DOMAIN "org.SHS") -set(_COMPANY "SHS") find_qt(Qt5 Core Gui OpenGL Xml) if (NOT Qt5) message(WARNING "Building ${PROJECT_NAME} available only on Qt5!") else() find_package(OpenGL REQUIRED) - set_version(qglengine - MAJOR 1 - MINOR 0 - REVISION 0 - BUILD "${BUILD_NUMBER}" - SUFFIX rc - OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/core/qglengine_version.h") + include(SHSTKQtMacros) + + set(qglengine_MAJOR 1) + set(qglengine_MINOR 0) + set(qglengine_REVISION 0) + set(qglengine_SUFFIX "rc") + set(qglengine_COMPANY SHS) + set(qglengine_DOMAIN org.SHS) + + if ("x${CMAKE_MODULE_PATH}" STREQUAL "x") + set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") + endif() + + shstk_begin_project(qglengine QGLENGINE) qt_sources(SRC) qt_sources(FSRC DIR "formats") @@ -25,22 +30,23 @@ else() file(GLOB PHS "*_p.h" "formats/*_p.h" "core/*_p.h") list(REMOVE_ITEM out_HDR "${PHS}") import_version(qglengine_core qglengine) - set_deploy_property(qglengine_core SHARED + set_deploy_property(qglengine_core ${qglengine_LIB_TYPE} LABEL "QGLEngine core library" - FULLNAME "${_DOMAIN}.qglengine_core" - COMPANY "${_COMPANY}" + FULLNAME "${qglengine_DOMAIN}.qglengine_core" + COMPANY "${qglengine_COMPANY}" INFO "QGLEngine core library") make_rc(qglengine_core _RC) - qt_add_library(qglengine_core SHARED out_CPP ${_RC}) + qt_add_library(qglengine_core ${qglengine_LIB_TYPE} out_CPP ${_RC}) qt_generate_export_header(qglengine_core) list(APPEND out_HDR "${CMAKE_CURRENT_BINARY_DIR}/qglengine_core_export.h") - qt_target_include_directories(qglengine_core PRIVATE ${QAD_INCLUDES} "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/core") - qt_target_link_libraries(qglengine_core qad_utils qad_widgets assimp ${OPENGL_LIBRARIES}) - message(STATUS "Building QGLEngine version ${qglengine_VERSION} (SHARED)") + list(APPEND out_HDR "${qglengine_VERSION_FILE}") + qt_target_include_directories(qglengine_core PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/core") + qt_target_link_libraries(qglengine_core QAD::Widgets assimp ${OPENGL_LIBRARIES}) + message(STATUS "Building QGLEngine version ${qglengine_VERSION} (${qglengine_LIB_TYPE_MSG})") list(APPEND QT_MULTILIB_LIST qglengine_core) add_subdirectory(widgets) - copy_to_parent("") - sdk_install("qglengine" FALSE "qglengine_core" "${out_HDR}" "${out_QM}") + shstk_copy_to_parent() + shstk_qt_install("qglengine" FALSE "qglengine_core" "${out_HDR}" "${out_QM}") if (NOT DEFINED ANDROID_PLATFORM) if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/plugin") #add_subdirectory(plugin) @@ -52,4 +58,10 @@ else() qt_add_executable(qglengine_test test_CPP) qt_target_link_libraries(qglengine_test qglengine_core qglengine_widgets) qt_target_include_directories(qglengine_test PRIVATE ${QAD_INCLUDES} "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/core" "${CMAKE_CURRENT_SOURCE_DIR}/widgets") + + if (NOT LOCAL) + file(GLOB CMAKES "cmake/*.cmake" "cmake/*.in") + install(FILES ${CMAKES} DESTINATION ${CMAKE_ROOT}/Modules) + endif() + endif() diff --git a/cmake/FindQGLEngine.cmake b/cmake/FindQGLEngine.cmake new file mode 100644 index 0000000..b2c9e07 --- /dev/null +++ b/cmake/FindQGLEngine.cmake @@ -0,0 +1,103 @@ +#[[ + +Create imported targets: + * QGLEngine::Core + * QGLEngine::Widgets + +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 + +find_package(QAD REQUIRED) +include(QtWraps) +include(SHSTKMacros) + +shstk_is_parent_exists(hasParent PARENT_DIRECTORY) + +shstk_set_find_dirs(qglengine) +set(_SEARCH_DIR ${qglengine_LIBDIR}) + +if (NOT BUILDING_qglengine) + list(APPEND _SEARCH_DIR $ENV{SMSDK_DIR}/lib) + shstk_find_header(qglengine QGLENGINE "qglengine_version.h" "") +endif() + +if(QGLENGINE_FIND_VERSION VERSION_GREATER QGLENGINE_VERSION) + message(FATAL_ERROR "QGLENGINE version ${QGLENGINE_VERSION} is available, but ${QGLENGINE_FIND_VERSION} requested!") +endif() + +set(__libs "core;widgets") + +set(__module_core Core ) +set(__module_widgets Widgets) + +foreach (_l ${__libs}) + set( __inc_${_l} "") + set(__deps_${_l} "") + set(__libs_${_l} "") +endforeach() + +set(__deps_core "QAD::Widgets") +set(__deps_widgets "QGLEngine::Core") + +#message("find QGLEngine ${BUILDING_qglengine}") + +if (BUILDING_qglengine) + + if (NOT SET_TARGETS_qglengine) + set(SET_TARGETS_qglengine ON CACHE BOOL "") + #message("create aliases") + foreach(_l ${__libs}) + foreach(_v ${_QT_VERSIONS_}) + set(_m ${__module_${_l}}) + if((NOT TARGET QGLEngine::${_m}${_v}) AND TARGET qglengine_${_l}${_v}) + #message("alias QGLEngine::${_m}${_v} = qglengine_${_l}${_v}") + set(MULTILIB_QGLEngine__${_m}_SUFFIX_Qt${_v} ${_v} CACHE STRING "") + add_library(QGLEngine::${_m}${_v} ALIAS qglengine_${_l}${_v}) + endif() + endforeach() + list(APPEND QT_MULTILIB_LIST QGLEngine::${_m}) + endforeach() + endif() + + set(QGLENGINE_FOUND ON CACHE BOOL "") + +else() + + #message("create interfaces") + foreach(_l ${__libs}) + foreach(_v ${_QT_VERSIONS_}) + set(_m ${__module_${_l}}) + find_library(QGLENGINE_LIBRARY_${_l}${_v} qglengine_${_l}${_v} HINTS ${_SEARCH_DIR}) + #message("found ${_l}${_v} = ${QGLENGINE_LIBRARY_${_l}${_v}} (${qglengine_INCLUDES})") + if((NOT TARGET QGLEngine::${_m}${_v}) AND QGLENGINE_LIBRARY_${_l}${_v}) + #message("imported QGLEngine::${_m}${_v} = ${QGLENGINE_LIBRARY_${_l}${_v}}") + set(MULTILIB_QGLEngine__${_m}_SUFFIX_Qt${_v} ${_v} CACHE STRING "") + add_library(QGLEngine::${_m}${_v} UNKNOWN IMPORTED) + set(_deps) + foreach (_d ${__deps_${_l}}) + if ((${_d} MATCHES "QAD::.*") OR (${_d} MATCHES "QGLEngine::.*")) + list(APPEND _deps ${_d}${_v}) + else() + list(APPEND _deps ${_d}) + endif() + endforeach() + set_target_properties(QGLEngine::${_m}${_v} PROPERTIES + IMPORTED_LOCATION "${QGLENGINE_LIBRARY_${_l}${_v}}" + INTERFACE_INCLUDE_DIRECTORIES "${qglengine_INCLUDES}" + INTERFACE_LINK_LIBRARIES "${_deps}") + endif() + endforeach() + list(APPEND QT_MULTILIB_LIST QGLEngine::${_m}) + endforeach() + +endif() + +if(hasParent) + set(QT_MULTILIB_LIST ${QT_MULTILIB_LIST} PARENT_SCOPE) +endif() + +set(QGLENGINE_FOUND ON CACHE BOOL "") diff --git a/core/gltypes.h b/core/gltypes.h index 5550643..57ec127 100644 --- a/core/gltypes.h +++ b/core/gltypes.h @@ -79,6 +79,7 @@ #endif #include #include "qglengine_version.h" +#include "qglengine_core_export.h" //#ifdef WINDOWS diff --git a/core/qglengine_version.h b/core/qglengine_version.h deleted file mode 100644 index 0895067..0000000 --- a/core/qglengine_version.h +++ /dev/null @@ -1,27 +0,0 @@ -// This file generated by CMake set_version() version 2 - -#ifndef QGLENGINE_QGLENGINE_VERSION_H -#define QGLENGINE_QGLENGINE_VERSION_H - - -// Project - -#define QGLENGINE_VERSION_MAJOR 1 -#define QGLENGINE_VERSION_MINOR 0 -#define QGLENGINE_VERSION_REVISION 0 -#define QGLENGINE_VERSION_BUILD 9999 -#define QGLENGINE_VERSION_SUFFIX "rc" -#define QGLENGINE_VERSION_NAME "1.0.0_rc" -#define QGLENGINE_MAKE_VERSION(major, minor, revision) ((major << 16) | (minor << 8) | revision) -#define QGLENGINE_VERSION QGLENGINE_MAKE_VERSION(QGLENGINE_VERSION_MAJOR, QGLENGINE_VERSION_MINOR, QGLENGINE_VERSION_REVISION) - - -// Tools - -#define QGLENGINE_CMAKE_VERSION "3.17.1" -#define QGLENGINE_CXX_COMPILER "GNU 8.1.0" -#define QGLENGINE_BUILD_DATE "22.08.2020 00:51" -#define QGLENGINE_ARCH "i386" - - -#endif // QGLENGINE_QGLENGINE_VERSION_H diff --git a/widgets/CMakeLists.txt b/widgets/CMakeLists.txt index 8055180..bc5c410 100644 --- a/widgets/CMakeLists.txt +++ b/widgets/CMakeLists.txt @@ -9,18 +9,18 @@ qt_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM) file(GLOB PHS "*_p.h") list(REMOVE_ITEM out_HDR "${PHS}") import_version(${PROJECT_NAME} qglengine) -set_deploy_property(${PROJECT_NAME} SHARED +set_deploy_property(${PROJECT_NAME} ${qglengine_LIB_TYPE} LABEL "QGLEngine widgets library" - FULLNAME "${_DOMAIN}.${PROJECT_NAME}" - COMPANY "${_COMPANY}" + FULLNAME "${qglengine_DOMAIN}.${PROJECT_NAME}" + COMPANY "${qglengine_COMPANY}" INFO "QGLEngine widgets library") make_rc(${PROJECT_NAME} _RC) -qt_add_library(${PROJECT_NAME} SHARED out_CPP ${_RC}) +qt_add_library(${PROJECT_NAME} ${qglengine_LIB_TYPE} out_CPP ${_RC}) qt_generate_export_header(${PROJECT_NAME}) list(APPEND out_HDR "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h") -qt_target_link_libraries(${PROJECT_NAME} qad_utils qad_widgets qglengine_core) -qt_target_include_directories(${PROJECT_NAME} PRIVATE ${QAD_INCLUDES} "${CMAKE_CURRENT_SOURCE_DIR}/../" "${CMAKE_CURRENT_SOURCE_DIR}/../core") +qt_target_link_libraries(${PROJECT_NAME} QAD::Widgets qglengine_core) +#qt_target_include_directories(${PROJECT_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/../core") list(APPEND QT_MULTILIB_LIST ${PROJECT_NAME}) -copy_to_parent("") +shstk_copy_to_parent() #message(STATUS "Building ${PROJECT_NAME}") -sdk_install("qglengine" FALSE "${PROJECT_NAME}" "${out_HDR}" "${out_QM}") +shstk_qt_install("qglengine" FALSE "${PROJECT_NAME}" "${out_HDR}" "${out_QM}")