diff --git a/CMakeLists.txt b/CMakeLists.txt index fdfa4ab2..0908f751 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,12 @@ cmake_minimum_required(VERSION 3.0) cmake_policy(SET CMP0017 NEW) # need include() with .cmake project(pip) +set(_PIP_MAJOR 1) +set(_PIP_MINOR 12) +set(_PIP_REVISION 1) +set(_PIP_SUFFIX rc1) +set(_PIP_COMPANY SHS) +set(_PIP_DOMAIN org.SHS) if ("x${CMAKE_MODULE_PATH}" STREQUAL "x") set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") @@ -8,6 +14,7 @@ endif() include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) set(PIP_BUILD 1) include(CheckFunctionExists) +include(DeployMacros) include(PIPMacros) set(_ICU_DEFAULT OFF) @@ -89,6 +96,17 @@ else() message(STATUS "Building PIP shared library") endif() + +# Version +set_version(pip MAJOR "${_PIP_MAJOR}" MINOR "${_PIP_MINOR}" REVISION "${_PIP_REVISION}" SUFFIX "${_PIP_SUFFIX}" OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${PIP_SRC_MAIN}/piversion.h") +set_deploy_property(pip ${PIP_LIB_TYPE} + LABEL "PIP main library" + FULLNAME "${_PIP_DOMAIN}.pip" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") +message(STATUS "Building PIP version ${PIP_VERSION}") + + if(MINGW) find_package(MinGW REQUIRED) list(APPEND CMAKE_LIBRARY_PATH ${MINGW_LIB}) @@ -135,38 +153,6 @@ if (NOT DEFINED PIP_CMG) endif() -# Version -macro(versionExtract _file _name _out _string) - file(STRINGS "${_file}" line REGEX "#define[ \t]+${_name}.*") - if (${_string}) - string(REGEX MATCH "\".*\"" _str "${line}") - string(LENGTH ${_str} _sl) - math(EXPR _sl "${_sl}-2") - string(SUBSTRING "${_str}" 1 ${_sl} ${_out}) - else() - string(REGEX MATCH "[0-9]+" ${_out} "${line}") - endif() - #message("found ${_name} = ${${_out}}") -endmacro() -set(SHARED_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/libs/shared") -versionExtract("${PIP_SRC_MAIN}/piversion.h" "PIP_VERSION_MAJOR" VERSION_MAJOR 0) -versionExtract("${PIP_SRC_MAIN}/piversion.h" "PIP_VERSION_MINOR" VERSION_MINOR 0) -versionExtract("${PIP_SRC_MAIN}/piversion.h" "PIP_VERSION_REVISION" VERSION_REVISION 0) -versionExtract("${PIP_SRC_MAIN}/piversion.h" "PIP_VERSION_SUFFIX" VERSION_SUFFIX 1) -set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}") -set(SOVERSION ${VERSION}) -set(_PIP_VERSION_CHANGED 0) -if ((NOT _PIP_FULL_VERSION) OR (NOT "x${_PIP_FULL_VERSION}" STREQUAL "x${VERSION}${VERSION_SUFFIX}")) - set(_PIP_VERSION_CHANGED 1) - set(_PIP_FULL_VERSION "${VERSION}${VERSION_SUFFIX}" CACHE STRING "pip_full_version" FORCE) -endif() -#message("${_PIP_VERSION_CHANGED}") -message(STATUS "Building PIP version ${_PIP_FULL_VERSION}") -if (_PIP_VERSION_CHANGED) - file(WRITE "${PIP_SRC_MAIN}/pip_version_str.h" "// This file was generated by PIP CMake, don`t edit it!\n#define __PIP_VERSION_STR__ \"${_PIP_FULL_VERSION}\"\n") -endif() - - # Compiler get_filename_component(C_COMPILER "${CMAKE_C_COMPILER}" NAME) #link_directories(${CMAKE_CURRENT_BINARY_DIR}) @@ -379,9 +365,9 @@ else() endif() list(APPEND LIBS_STATUS ${LIBS_MAIN}) if(WIN32) - list(APPEND CPP_LIB_MAIN "pip_resource_win.rc") + make_rc(pip _RC) add_definitions(-DPSAPI_VERSION=1) - add_library(pip ${PIP_LIB_TYPE} ${CPP_LIB_MAIN} ${HDRS} ${PHDRS}) + add_library(pip ${PIP_LIB_TYPE} ${CPP_LIB_MAIN} ${HDRS} ${PHDRS} ${_RC}) if(${C_COMPILER} STREQUAL "cl.exe") set(CMAKE_CXX_FLAGS "/O2 /Ob2 /Ot /W0") endif() @@ -404,8 +390,15 @@ if (NOT PIP_FREERTOS) find_library(usb_FOUND usb SHARED) if(usb_FOUND) message(STATUS "Building PIP with USB support") + import_version(pip_usb pip) + set_deploy_property(pip_usb ${PIP_LIB_TYPE} + LABEL "PIP usb support" + FULLNAME "${_PIP_DOMAIN}.pip_usb" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_usb _RC) add_definitions(-DPIP_USB) - add_library(pip_usb ${PIP_LIB_TYPE} ${CPP_LIB_USB}) + add_library(pip_usb ${PIP_LIB_TYPE} ${CPP_LIB_USB} ${_RC}) target_link_libraries(pip_usb pip ${usb_FOUND}) list(APPEND LIBS_STATUS usb) list(APPEND PIP_LIBS_TARGETS pip_usb) @@ -418,8 +411,15 @@ if (NOT PIP_FREERTOS) find_library(sodium_FOUND sodium) if(sodium_FOUND) message(STATUS "Building PIP with crypt support") + import_version(pip_crypt pip) + set_deploy_property(pip_crypt ${PIP_LIB_TYPE} + LABEL "PIP crypt support" + FULLNAME "${_PIP_DOMAIN}.pip_crypt" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_crypt _RC) add_definitions(-DPIP_CRYPT) - add_library(pip_crypt ${PIP_LIB_TYPE} ${CPP_LIB_CRYPT}) + add_library(pip_crypt ${PIP_LIB_TYPE} ${CPP_LIB_CRYPT} ${_RC}) target_link_libraries(pip_crypt pip ${sodium_FOUND}) list(APPEND LIBS_STATUS sodium) list(APPEND PIP_LIBS_TARGETS pip_crypt) @@ -432,8 +432,15 @@ if (NOT PIP_FREERTOS) find_library(zlib_FOUND NAMES z zlib) if(zlib_FOUND) message(STATUS "Building PIP with zlib compress support") + import_version(pip_compress pip) + set_deploy_property(pip_compress ${PIP_LIB_TYPE} + LABEL "PIP compression support" + FULLNAME "${_PIP_DOMAIN}.pip_compress" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_compress _RC) add_definitions(-DPIP_COMPRESS) - add_library(pip_compress ${PIP_LIB_TYPE} ${CPP_LIB_COMPRESS}) + add_library(pip_compress ${PIP_LIB_TYPE} ${CPP_LIB_COMPRESS} ${_RC}) target_link_libraries(pip_compress pip ${zlib_FOUND}) list(APPEND LIBS_STATUS zlib) list(APPEND PIP_LIBS_TARGETS pip_compress) @@ -484,7 +491,14 @@ if (NOT PIP_FREERTOS) endforeach() if(FFTW_LIBS) message(STATUS "Building PIP with fftw3 support: ${FFTW_LIBS}") - add_library(pip_fftw ${PIP_LIB_TYPE} ${CPP_LIB_FFTW}) + import_version(pip_fftw pip) + set_deploy_property(pip_fftw ${PIP_LIB_TYPE} + LABEL "PIP FFTW support" + FULLNAME "${_PIP_DOMAIN}.pip_fftw" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_fftw _RC) + add_library(pip_fftw ${PIP_LIB_TYPE} ${CPP_LIB_FFTW} ${_RC}) target_link_libraries(pip_fftw pip ${FFTW_ABS_LIBS}) list(APPEND LIBS_STATUS ${FFTW_LIBS}) list(APPEND PIP_LIBS_TARGETS pip_fftw) @@ -497,6 +511,13 @@ if (NOT PIP_FREERTOS) find_package(OpenCL QUIET) if(OpenCL_FOUND) message(STATUS "Building PIP with OpenCL support") + import_version(pip_opencl pip) + set_deploy_property(pip_opencl ${PIP_LIB_TYPE} + LABEL "PIP OpenCL support" + FULLNAME "${_PIP_DOMAIN}.pip_opencl" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_opencl _RC) if(APPLE) include_directories(${OpenCL_INCLUDE_DIRS}/Headers) else() @@ -504,7 +525,7 @@ if (NOT PIP_FREERTOS) endif() add_definitions(-DPIP_OPENCL) pip_resources(CL_RES "src_opencl/resources.conf") - add_library(pip_opencl ${PIP_LIB_TYPE} ${CPP_LIB_OPENCL} ${CL_RES}) + add_library(pip_opencl ${PIP_LIB_TYPE} ${CPP_LIB_OPENCL} ${CL_RES} ${_RC}) add_dependencies(pip_opencl pip_rc) if(${CMAKE_VERSION} VERSION_LESS "3.7.0") target_link_libraries(pip_opencl pip OpenCL) @@ -521,7 +542,14 @@ if (NOT PIP_FREERTOS) # Check if PIP IO Utils library supports crypt set(IO_UTILS_LIBS pip) - add_library(pip_io_utils ${PIP_LIB_TYPE} ${CPP_LIB_IO_UTILS}) + import_version(pip_io_utils pip) + set_deploy_property(pip_io_utils ${PIP_LIB_TYPE} + LABEL "PIP I/O utilites" + FULLNAME "${_PIP_DOMAIN}.pip_io_utils" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_io_utils _RC) + add_library(pip_io_utils ${PIP_LIB_TYPE} ${CPP_LIB_IO_UTILS} ${_RC}) if(sodium_FOUND) message(STATUS "Building PIP IO Utils library with crypt support") list(APPEND IO_UTILS_LIBS pip_crypt) @@ -534,7 +562,14 @@ if (NOT PIP_FREERTOS) # Concurrent module set(CONCURRENT_LIBS pip) - add_library(pip_concurrent ${PIP_LIB_TYPE} ${CPP_LIB_CONCURRENT}) + import_version(pip_concurrent pip) + set_deploy_property(pip_concurrent ${PIP_LIB_TYPE} + LABEL "PIP concurrent support" + FULLNAME "${_PIP_DOMAIN}.pip_concurrent" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_concurrent _RC) + add_library(pip_concurrent ${PIP_LIB_TYPE} ${CPP_LIB_CONCURRENT} ${_RC}) target_link_libraries(pip_concurrent ${CONCURRENT_LIBS}) set_property(TARGET pip_concurrent PROPERTY CXX_STANDARD 11) list(APPEND PIP_LIBS_TARGETS pip_concurrent) @@ -551,8 +586,15 @@ if (NOT PIP_FREERTOS) # Build cloud library if crypt enabled if(sodium_FOUND) message(STATUS "Building PICloud support") + import_version(pip_cloud pip) + set_deploy_property(pip_cloud ${PIP_LIB_TYPE} + LABEL "PIP cloud transport support" + FULLNAME "${_PIP_DOMAIN}.pip_cloud" + COMPANY "${_PIP_COMPANY}" + INFO "Platform-Independent Primitives") + make_rc(pip_cloud _RC) add_definitions(-DPIP_CLOUD) - add_library(pip_cloud ${PIP_LIB_TYPE} ${CPP_LIB_CLOUD}) + add_library(pip_cloud ${PIP_LIB_TYPE} ${CPP_LIB_CLOUD} ${_RC}) target_link_libraries(pip_cloud pip pip_crypt) list(APPEND PIP_LIBS_TARGETS pip_cloud) endif() @@ -610,7 +652,7 @@ if(LIB) # Precompiled header #add_custom_target(pip_pch ALL COMMAND ${CMAKE_CXX_COMPILER} -O2 -fPIC -g3 ${CMAKE_INSTALL_PREFIX}/include/pip/pip.h DEPENDS pip SOURCES ${HDRS}) #list(APPEND HDRS "pip.h.gch") - file(GLOB CMAKES "cmake/*.cmake") + file(GLOB CMAKES "cmake/*.cmake" "cmake/*.in") install(FILES ${CMAKES} DESTINATION ${CMAKE_ROOT}/Modules) else() if(NOT PIP_FREERTOS) @@ -696,9 +738,9 @@ if (NOT PIP_FREERTOS) include(PIPDocumentation) find_package(Doxygen) if(DOXYGEN_FOUND) - set(DOXY_PROJECT_NUMBER "${_PIP_FULL_VERSION}") - set(DOXY_QHP_CUST_FILTER_ATTRS "\"PIP ${_PIP_FULL_VERSION}\"") - set(DOXY_QHP_SECT_FILTER_ATTRS "\"PIP ${_PIP_FULL_VERSION}\"") + set(DOXY_PROJECT_NUMBER "${PIP_VERSION}") + set(DOXY_QHP_CUST_FILTER_ATTRS "\"PIP ${PIP_VERSION}\"") + set(DOXY_QHP_SECT_FILTER_ATTRS "\"PIP ${PIP_VERSION}\"") set(DOXY_EXAMPLE_PATH "\"${PROJECT_SOURCE_DIR}/doc/examples\"") set(DOXY_IMAGE_PATH "\"${PROJECT_SOURCE_DIR}/doc/images\"") if(DOXYGEN_DOT_EXECUTABLE) diff --git a/pip_resource_win.rc b/pip_resource_win.rc deleted file mode 100644 index 0bbc3467..00000000 --- a/pip_resource_win.rc +++ /dev/null @@ -1,36 +0,0 @@ -#if defined(UNDER_CE) -# include -#else -# include -#endif -#include -#include - -VS_VERSION_INFO VERSIONINFO - FILEVERSION PIP_VERSION_MAJOR,PIP_VERSION_MINOR,PIP_VERSION_REVISION,0 - PRODUCTVERSION PIP_VERSION_MAJOR,PIP_VERSION_MINOR,PIP_VERSION_REVISION,0 - FILEFLAGSMASK 0x3fL - FILEFLAGS 0x0L - FILEOS VOS__WINDOWS32 - FILETYPE VFT_DLL - FILESUBTYPE 0x0L - BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904B0" - BEGIN - VALUE "CompanyName", "Peri4\0" - VALUE "FileDescription", "Platform-Independent Primitives\0" - VALUE "FileVersion", __PIP_VERSION_STR__ - VALUE "LegalCopyright", "\0" - VALUE "OriginalFilename", "libpip.dll\0" - VALUE "ProductName", "PIP\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END - END -/* End of Version info */ - diff --git a/src_main/core/pibase.h b/src_main/core/pibase.h index 682027a1..6e7b7c66 100644 --- a/src_main/core/pibase.h +++ b/src_main/core/pibase.h @@ -32,9 +32,6 @@ #include "pip_defs.h" #include "string.h" -//! Version of PIP in hex - 0x##(Major)##(Minor)##(Revision) -#define PIP_VERSION ((PIP_VERSION_MAJOR << 16) | (PIP_VERSION_MINOR < 8) | PIP_VERSION_REVISION) - //! Meta-information section for any entity. //! Parsing by \a pip_cmg and can be accessed by \a PICodeInfo. //! Contains sequence of key=value pairs, e.g. @@ -55,6 +52,9 @@ //! Suffix of PIP version # define PIP_VERSION_SUFFIX +//! Version of PIP in hex - 0x##(Major)##(Minor)##(Revision) +# define PIP_VERSION + //! Macro is defined when compile-time debug is enabled # define PIP_DEBUG diff --git a/src_main/piversion.h b/src_main/piversion.h deleted file mode 100644 index 172170bb..00000000 --- a/src_main/piversion.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef PIVERSION_H -#define PIVERSION_H - -#define PIP_VERSION_MAJOR 1 -#define PIP_VERSION_MINOR 12 -#define PIP_VERSION_REVISION 1 -#define PIP_VERSION_SUFFIX "_beta" - -#endif // PIVERSION_H