Merge pull request 'cmake refactoring' (#5) from cmake_refactor into master

Reviewed-on: https://git.shs.tools/SHS/cmake/pulls/5
This commit was merged in pull request #5.
This commit is contained in:
2022-08-08 16:43:06 +03:00
2 changed files with 90 additions and 104 deletions

View File

@@ -2,21 +2,21 @@
shstk_define_option(name desc) shstk_define_option(name desc)
shstk_begin_project(domain module) shstk_begin_project(name)
shstk_install(dir is_app target h_files) shstk_install(dir is_app target h_files)
shstk_is_parent_exists(out) shstk_is_parent_exists(out)
shstk_copy_to_parent(domain) shstk_copy_to_parent()
shstk_add_directories(domain) shstk_add_directories()
shstk_add_directories_with_include(is_qt domain) shstk_add_directories_with_include(is_qt name)
shstk_set_find_dirs(domain module) shstk_set_find_dirs(name)
shstk_find_header(module filename add_find_info) shstk_find_header(name filename add_find_info)
align_list(list out) align_list(list out)
@@ -38,7 +38,9 @@ macro(shstk_define_option name desc)
endmacro() endmacro()
macro(shstk_begin_project domain module) macro(shstk_begin_project name)
string(TOLOWER "${name}" ${name}_lowercase)
string(TOUPPER "${name}" ${name}_uppercase)
set(INSTALL_PREFIX) set(INSTALL_PREFIX)
set(_plugins_default_ 1) set(_plugins_default_ 1)
if (CMAKE_CROSSCOMPILING) if (CMAKE_CROSSCOMPILING)
@@ -118,45 +120,38 @@ macro(shstk_begin_project domain module)
set(_qt_libs ) set(_qt_libs )
set(_qt_apps ) set(_qt_apps )
set(_qt_plugs) set(_qt_plugs)
if (NOT "x${domain}" STREQUAL "x") if (NOT "x${name}" STREQUAL "x")
set(BUILDING_${domain} ON CACHE BOOL "build ${domain}") set(BUILDING_${name} ON CACHE BOOL "build ${name}")
set(${domain}_ROOT_SRC "${CMAKE_CURRENT_SOURCE_DIR}" CACHE STRING "") set(${name}_ROOT_SRC "${CMAKE_CURRENT_SOURCE_DIR}" CACHE STRING "")
set(${domain}_ROOT_BIN "${CMAKE_CURRENT_BINARY_DIR}" CACHE STRING "") set(${name}_ROOT_BIN "${CMAKE_CURRENT_BINARY_DIR}" CACHE STRING "")
set(SET_TARGETS_${domain} OFF CACHE BOOL "" FORCE) set(SET_TARGETS_${name} OFF CACHE BOOL "" FORCE)
if(STATIC_LIB) if(STATIC_LIB)
add_definitions(-D${module}_STATIC_DEFINE) add_definitions(-D${${name}_uppercase}_STATIC_DEFINE)
set(${domain}_LIB_TYPE STATIC) set(${name}_LIB_TYPE STATIC)
set(${domain}_LIB_TYPE_MSG "Static") set(${name}_LIB_TYPE_MSG "Static")
else() else()
set(${domain}_LIB_TYPE SHARED) set(${name}_LIB_TYPE SHARED)
set(${domain}_LIB_TYPE_MSG "Shared") set(${name}_LIB_TYPE_MSG "Shared")
endif() endif()
if (CMAKE_BUILD_TYPE MATCHES Debug) if (CMAKE_BUILD_TYPE MATCHES Debug)
set(${domain}_BUILD_TYPE "Debug") set(${name}_BUILD_TYPE "Debug")
#add_definitions(-DPIP_DEBUG)
else() else()
set(${domain}_BUILD_TYPE "Release") set(${name}_BUILD_TYPE "Release")
endif() endif()
#set(${domain}_MAJOR 1) set(${name}_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/${${name}_lowercase}_version.h")
#set(${domain}_MINOR 8) set_version(${name}
#set(${domain}_REVISION 0) MAJOR "${${name}_MAJOR}"
#set(${domain}_SUFFIX ) MINOR "${${name}_MINOR}"
#set(${domain}_COMPANY SHS) REVISION "${${name}_REVISION}"
#set(${domain}_DOMAIN org.SHS)
set(${domain}_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/${domain}_version.h")
set_version(${domain}
MAJOR "${${domain}_MAJOR}"
MINOR "${${domain}_MINOR}"
REVISION "${${domain}_REVISION}"
BUILD "${BUILD_NUMBER}" BUILD "${BUILD_NUMBER}"
SUFFIX "${${domain}_SUFFIX}" SUFFIX "${${name}_SUFFIX}"
OUTPUT "${${domain}_VERSION_FILE}") OUTPUT "${${name}_VERSION_FILE}")
set_deploy_property(${domain} ${${domain}_LIB_TYPE} set_deploy_property(${name} ${${name}_LIB_TYPE}
FULLNAME "${${domain}_DOMAIN}.*" FULLNAME "${${name}_DOMAIN}.*"
COMPANY "${${domain}_COMPANY}") COMPANY "${${name}_COMPANY}")
endif() endif()
@@ -227,7 +222,7 @@ macro(shstk_copy_to_parent)
endmacro() endmacro()
macro(shstk_add_directories domain) macro(shstk_add_directories)
file(GLOB _dl "[^.]*") file(GLOB _dl "[^.]*")
foreach(_d ${_dl}) foreach(_d ${_dl})
if(IS_DIRECTORY ${_d}) if(IS_DIRECTORY ${_d})
@@ -238,7 +233,7 @@ macro(shstk_add_directories domain)
endmacro() endmacro()
macro(shstk_add_directories_with_include is_qt domain) macro(shstk_add_directories_with_include is_qt name)
set(DIRS) set(DIRS)
file(GLOB _dl "[^.]*") file(GLOB _dl "[^.]*")
foreach(_d ${_dl}) foreach(_d ${_dl})
@@ -250,7 +245,7 @@ macro(shstk_add_directories_with_include is_qt domain)
foreach(_d ${DIRS}) foreach(_d ${DIRS})
get_filename_component(_dname "${_d}" NAME) get_filename_component(_dname "${_d}" NAME)
if (${is_qt}) if (${is_qt})
list(APPEND QT_MULTILIB_LIST ${domain}${_dname}) list(APPEND QT_MULTILIB_LIST ${name}${_dname})
#set(QT_MULTILIB_LIST "${QT_MULTILIB_LIST}" CACHE STRING "") #set(QT_MULTILIB_LIST "${QT_MULTILIB_LIST}" CACHE STRING "")
endif() endif()
endforeach() endforeach()
@@ -263,40 +258,35 @@ macro(shstk_add_directories_with_include is_qt domain)
endmacro() endmacro()
macro(shstk_set_find_dirs domain module) macro(shstk_set_find_dirs name)
#set(_PIP_INCDIR "${PIP_DIR}/include/pip") string(TOLOWER "${name}" ${name}_lowercase)
#set(_PIP_LIBDIR "${PIP_DIR}/lib") set(${name}_INCDIR)
set(${domain}_INCDIR) set(${name}_LIBDIR)
set(${domain}_LIBDIR) set(${name}_BINDIR)
set(${domain}_BINDIR) set(${name}_FIND_PROGRAM_ARG)
set(${domain}_FIND_PROGRAM_ARG) set(${name}_BINEXT "")
set(${domain}_BINEXT "") if(DEFINED ${name}_DIR)
#if (BUILDING_${domain}) list(APPEND ${name}_LIBDIR "${${name}_DIR}/lib")
# list(APPEND ${domain}_INCDIR "${${domain}_ROOT_SRC}") list(APPEND ${name}_INCDIR "${${name}_DIR}/include/${${name}_lowercase}")
# list(APPEND ${domain}_LIBDIR "${${domain}_ROOT_BIN}") list(APPEND ${name}_BINDIR "${${name}_DIR}/bin")
#endif()
if(DEFINED ${module}_DIR)
list(APPEND ${domain}_LIBDIR "${${module}_DIR}/lib")
list(APPEND ${domain}_INCDIR "${${module}_DIR}/include/${domain}")
list(APPEND ${domain}_BINDIR "${${module}_DIR}/bin")
endif() endif()
if(MINGW_INCLUDE) if(MINGW_INCLUDE)
list(APPEND ${domain}_INCDIR "${MINGW_INCLUDE}/${domain}") list(APPEND ${name}_INCDIR "${MINGW_INCLUDE}/${${name}_lowercase}")
list(APPEND ${domain}_LIBDIR "${MINGW_LIB}") list(APPEND ${name}_LIBDIR "${MINGW_LIB}")
list(APPEND ${domain}_BINDIR "${MINGW_BIN}") list(APPEND ${name}_BINDIR "${MINGW_BIN}")
endif() endif()
if(CMAKE_CROSSCOMPILING) if(CMAKE_CROSSCOMPILING)
list(APPEND ${domain}_INCDIR "${CMAKE_PREFIX_PATH}/include/${domain}") list(APPEND ${name}_INCDIR "${CMAKE_PREFIX_PATH}/include/${${name}_lowercase}")
list(APPEND ${domain}_LIBDIR "${CMAKE_PREFIX_PATH}/lib") list(APPEND ${name}_LIBDIR "${CMAKE_PREFIX_PATH}/lib")
set(${domain}_FIND_PROGRAM_ARG "NO_DEFAULT_PATH") set(${name}_FIND_PROGRAM_ARG "NO_DEFAULT_PATH")
list(APPEND ${domain}_BINDIR "/usr/bin" "/usr/local/bin") list(APPEND ${name}_BINDIR "/usr/bin" "/usr/local/bin")
include_directories(${CMAKE_PREFIX_PATH}/include) include_directories(${CMAKE_PREFIX_PATH}/include)
link_directories(${CMAKE_PREFIX_PATH}/lib) link_directories(${CMAKE_PREFIX_PATH}/lib)
else() else()
list(APPEND ${domain}_BINDIR "${CMAKE_PREFIX_PATH}/bin") list(APPEND ${name}_BINDIR "${CMAKE_PREFIX_PATH}/bin")
if(NOT WIN32) if(NOT WIN32)
list(APPEND ${domain}_INCDIR "/usr/include/${domain}" "/usr/local/include/${domain}") list(APPEND ${name}_INCDIR "/usr/include/${${name}_lowercase}" "/usr/local/include/${${name}_lowercase}")
list(APPEND ${domain}_LIBDIR "/usr/lib" "/usr/local/lib") list(APPEND ${name}_LIBDIR "/usr/lib" "/usr/local/lib")
endif() endif()
if(APPLE) if(APPLE)
include_directories(/usr/local/include) include_directories(/usr/local/include)
@@ -304,51 +294,47 @@ macro(shstk_set_find_dirs domain module)
endif() endif()
endif() endif()
if ("x${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "xWindows") if ("x${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "xWindows")
set(${domain}_BINEXT ".exe") set(${name}_BINEXT ".exe")
if (CMAKE_CROSSCOMPILING) if (CMAKE_CROSSCOMPILING)
set(${domain}_FIND_PROGRAM_ARG) set(${name}_FIND_PROGRAM_ARG)
endif() endif()
endif() endif()
#list(APPEND ${domain}_BINDIR "${PIP_DIR}/bin")
endmacro() endmacro()
macro(shstk_find_header domain module filename add_find_info) macro(shstk_find_header name filename add_find_info)
if(NOT ${module}_VERSION) string(TOUPPER "${name}" ${name}_uppercase)
find_file(${domain}_H_INCLUDE "${filename}" HINTS ${${domain}_INCDIR}) if(NOT ${name}_VERSION)
#message("${domain}_H_INCLUDE \"${filename}\" HINTS \"${${domain}_INCDIR}\" = \"${${domain}_H_INCLUDE}\"") find_file(${name}_H_INCLUDE "${filename}" HINTS ${${name}_INCDIR})
if (NOT ${domain}_H_INCLUDE) #message("${name}_H_INCLUDE \"${filename}\" HINTS \"${${name}_INCDIR}\" = \"${${name}_H_INCLUDE}\"")
message(FATAL_ERROR "Can`t find ${module} version file (\"${filename}\")!") if (NOT ${name}_H_INCLUDE)
message(FATAL_ERROR "Can`t find ${name} version file (\"${filename}\")!")
endif() endif()
#if (DEFINED ANDROID_PLATFORM) get_filename_component(_inc ${${name}_H_INCLUDE} PATH)
# set(CD_INCLUDES ${ANDROID_SYSTEM_LIBRARY_PATH}/usr/include/${domain}) set(${name}_INCLUDES "${_inc}" CACHE STRING "")
#else()
get_filename_component(_inc ${${domain}_H_INCLUDE} PATH)
set(${domain}_INCLUDES "${_inc}" CACHE STRING "")
#endif()
include(CheckSymbolExists) include(CheckSymbolExists)
check_symbol_exists(${module}_VERSION_NAME "${${domain}_H_INCLUDE}" _${domain}_version_found) check_symbol_exists(${name}_VERSION_NAME "${${name}_H_INCLUDE}" _${name}_version_found)
if (_${domain}_version_found) if (_${name}_version_found)
file(STRINGS "${${domain}_H_INCLUDE}" _version REGEX "^[ \t]*#define[ \t]+${module}_VERSION_NAME+[ \t]+.*$") file(STRINGS "${${name}_H_INCLUDE}" _version REGEX "^[ \t]*#define[ \t]+${${name}_uppercase}_VERSION_NAME+[ \t]+.*$")
string(REGEX MATCH "\".*\"" _version ${_version}) string(REGEX MATCH "\".*\"" _version ${_version})
string(LENGTH ${_version} SL) string(LENGTH ${_version} SL)
math(EXPR SL ${SL}-2) math(EXPR SL ${SL}-2)
string(SUBSTRING ${_version} 1 ${SL} _version) string(SUBSTRING ${_version} 1 ${SL} _version)
set(${module}_VERSION ${_version} CACHE STRING "${module}_VERSION") set(${name}_VERSION ${_version} CACHE STRING "${name}_VERSION")
if (NOT _FIND_${module}_MSG) if (NOT _FIND_${name}_MSG)
set(_FIND_${module}_MSG 1 CACHE BOOL "find_msg_${module}" FORCE) set(_FIND_${name}_MSG 1 CACHE BOOL "find_msg_${name}" FORCE)
set(_afi) set(_afi)
if (NOT "x${add_find_info}" STREQUAL "x") if (NOT "x${add_find_info}" STREQUAL "x")
set(_afi ": ${add_find_info}") set(_afi ": ${add_find_info}")
endif() endif()
message(STATUS "Found ${module}${_afi} (version \"${${module}_VERSION}\")") message(STATUS "Found ${name}${_afi} (version \"${${name}_VERSION}\")")
endif() endif()
else() else()
message(FATAL_ERROR "Can`t find ${module}_VERSION_NAME in \"${filename}\"!") message(FATAL_ERROR "Can`t find ${${name}_uppercase}_VERSION_NAME in \"${filename}\"!")
endif() endif()
endif() endif()
if(${module}_FIND_VERSION VERSION_GREATER ${module}_VERSION) if(${name}_FIND_VERSION VERSION_GREATER ${name}_VERSION)
message(FATAL_ERROR "${module} version ${${module}_VERSION} is available, but ${${module}_FIND_VERSION} requested!") message(FATAL_ERROR "${name} version ${${name}_VERSION} is available, but ${${${name}_uppercase}_FIND_VERSION} requested!")
endif() endif()
endmacro() endmacro()

View File

@@ -4,7 +4,7 @@ shstk_qad_install(dir is_app target h_files qm_files)
shstk_qad_plugin(name modules libs) shstk_qad_plugin(name modules libs)
shstk_qad_project(name is_app domain modules libs) shstk_qad_project(name is_app root_name modules libs)
]] ]]
@@ -113,44 +113,44 @@ macro(shstk_qad_plugin NAME _MODULES _LIBS)
endmacro() endmacro()
macro(shstk_qad_project NAME IS_APP DOMAIN _MODULES _LIBS) macro(shstk_qad_project NAME IS_APP ROOT_NAME _MODULES _LIBS)
project(${NAME}) project(${NAME})
#message("qad_find_qt ${NAME} ${IS_APP} \"${QtVersions}\" \"${_MODULES}\"") #message("qad_find_qt ${NAME} ${IS_APP} \"${QtVersions}\" \"${_MODULES}\"")
qad_find_qt(${QtVersions} Core ${_MODULES}) qad_find_qt(${QtVersions} Core ${_MODULES})
qad_sources(SRC) qad_sources(SRC)
import_version(${PROJECT_NAME} ${DOMAIN}) import_version(${PROJECT_NAME} ${ROOT_NAME})
import_deploy_properties(${PROJECT_NAME} ${DOMAIN}) import_deploy_properties(${PROJECT_NAME} ${ROOT_NAME})
if (${IS_APP}) if (${IS_APP})
list(APPEND _qt_apps ${PROJECT_NAME}) list(APPEND _qt_apps ${PROJECT_NAME})
set_deploy_property(${PROJECT_NAME} set_deploy_property(${PROJECT_NAME}
LABEL ${PROJECT_NAME} LABEL ${PROJECT_NAME}
FULLNAME "${${DOMAIN}_DOMAIN}.${PROJECT_NAME}" FULLNAME "${${ROOT_NAME}_DOMAIN}.${PROJECT_NAME}"
INFO "${APP_INFO}" INFO "${APP_INFO}"
ICON "${APP_ICON}") ICON "${APP_ICON}")
else() else()
list(APPEND _qt_libs ${PROJECT_NAME}) list(APPEND _qt_libs ${PROJECT_NAME})
set_deploy_property(${PROJECT_NAME} SHARED set_deploy_property(${PROJECT_NAME} SHARED
LABEL ${PROJECT_NAME} LABEL ${PROJECT_NAME}
FULLNAME "${${DOMAIN}_DOMAIN}.${PROJECT_NAME}" FULLNAME "${${ROOT_NAME}_DOMAIN}.${PROJECT_NAME}"
INFO "${DOMAIN} ${NAME} library") INFO "${ROOT_NAME} ${NAME} library")
endif() endif()
make_rc(${PROJECT_NAME} out_RC) make_rc(${PROJECT_NAME} out_RC)
qad_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM ${out_RC}) qad_wrap(${SRC} HDRS out_HDR CPPS out_CPP QMS out_QM ${out_RC})
#message("add_exe proj ${NAME}, ${${DOMAIN}_DOMAIN}.${PROJECT_NAME}") #message("add_exe proj ${NAME}, ${${ROOT_NAME}_DOMAIN}.${PROJECT_NAME}")
if (${IS_APP}) if (${IS_APP})
set(_DEBUG_FLAG_) set(_DEBUG_FLAG_)
if (NOT CMAKE_BUILD_TYPE MATCHES Debug) if (NOT CMAKE_BUILD_TYPE MATCHES Debug)
set(_DEBUG_FLAG_ "WIN32") set(_DEBUG_FLAG_ "WIN32")
endif() endif()
qad_add_executable(${PROJECT_NAME} ${_DEBUG_FLAG_} out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN}) qad_add_executable(${PROJECT_NAME} ${_DEBUG_FLAG_} out_CPP ${${ROOT_NAME}_EXPORT_HEADER} ${ARGN})
else() else()
set(_libtype SHARED) set(_libtype SHARED)
if (NOT "x${${DOMAIN}_LIB_TYPE}" STREQUAL "x") if (NOT "x${${ROOT_NAME}_LIB_TYPE}" STREQUAL "x")
set(_libtype ${${DOMAIN}_LIB_TYPE}) set(_libtype ${${ROOT_NAME}_LIB_TYPE})
endif() endif()
qad_add_library(${PROJECT_NAME} ${_libtype} out_CPP ${${DOMAIN}_EXPORT_HEADER} ${ARGN}) qad_add_library(${PROJECT_NAME} ${_libtype} out_CPP ${${ROOT_NAME}_EXPORT_HEADER} ${ARGN})
#if(NOT ${DOMAIN}_STATIC_LIB) #if(NOT ${ROOT_NAME}_STATIC_LIB)
# qad_target_compile_definitions(${PROJECT_NAME} PRIVATE ${DOMAIN}_SHARED_DEFINE) # qad_target_compile_definitions(${PROJECT_NAME} PRIVATE ${ROOT_NAME}_SHARED_DEFINE)
#endif() #endif()
qad_generate_export_header(${PROJECT_NAME}) qad_generate_export_header(${PROJECT_NAME})
list(APPEND out_HDR "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h") list(APPEND out_HDR "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h")