mirror of
https://github.com/pocoproject/poco.git
synced 2025-02-21 22:56:19 +01:00

* fix(PollSet): #3248 #3249 * bump version to 1.11.0 * updated changelog| * #3299: NetSSL: Allow per-Context InvalidCertificateHandler * #3022: Process::isRunning(PID pid) causes handle leak on Windows * #3022: fix for WinCE * upgrade bundled pdjson to latest master * update build configs - add support for Apple Silicon * #2906, #2904: Support environments without hardware floating point * #3130: fix error handling: report original error before close() * #3107: remove unused variable * #3219: SMTPClientSession: invalid SMTP command if empty recipients list in MailMessage * Poco::trim*() code cleanup - use ptrdiff_t instead of int; additional test cases * #3182 Poco::Process:launch on MacOS BigSur: limit maximum number of file descriptors to close before exec() to 100000 * #3278: Fixing no hardware floating point support - Part II * #3090: Do not initialize value with undefined behavior * #3163: Correct Var::parse null value * #3196: std::forward for Poco::Optional ctor with rvalue * #3068: Documented ENABLE_JWT option * #3041: PostgreSQL and TEXT column type * #3099: Fixed Postgres extraction into Dynamic::Var * #3138: Add support of arch riscv32 * #2825: riscv: Enable double operations when using double float abi * #3166: Fix PostgresSQL BLOB extractor * #3237: An error in the documentation for Poco/JSON/Parser.h * #3193: ServerApplication::registerService() unquoted path security vulnerability * #3266: Order of Util::Application::uninitialize() is not in reverse as documented * #3215: XML parser returns item from different element in a array * #3282: Update constant in setContentType documentation * #3089: HTTPSessionFactory does not support HTTPClientSession::ProxyConfig * #2418: SecureServerSocket doesn't work with IpV6 * fix warnings * #3019: ObjectPool wait on borrow condition fix * #3224: Remove SSL23 support from Poco/Crypto * #3191: Fixing a bug in the NetSSL_Win module (Host name verification failed error) * disallow SSLv3 * #3269: Poco::Net::Context initialization with empty certificateFile * #3307: Poco::Crypto::X509Certificate: obtain certificate fingerprint * #3260: Memory leak in EVPPKey::loadKey used with files & wrong password * #3157: fix(openssl): add missing dependency to OpenSSL components * #3066: CMake warning about MYSQL casing * #3135: Poco::Data::SQLite::Utility::fileToMemory unsuccessful if journal exists * #3217: CMake: warning message with -DPOCO_STATIC confusing * #3274: Fix localtime_r for VxWorks 6.9 and later * #2746, #3169: Fix race condition on TCPServerDispatcher stop * #3092: add more detailed error description when LoadLibrary fails| * #3074: Fix sessions may not return back to the pool * #3309: optimize parsing from stream (no copying of entire JSON to memory); limit maximum depth to avoid stack overflow with malicious documents (fuzzing - #3285); code cleanup * JSON Parser performance improvements * #3310: Upgrade bundled SQLite to 3.35.5 * fix UB/bad cast in TCPServerTest.cpp * add comment regarding potential UB in AnyTest::testCastToReference() * support sanitizers in build configs * bump version * fix 'catching polymorphic type by value' warnings * fix 'catching polymorphic type by value' warnings * fix 'catching polymorphic type by value' warnings * remove failing Android build; add sanitizer builds * update postgres version * fix warning * fix warning * add GitHub workflow * fix ci.yml * fix ci.yml * additional ci builds * fix ci.yml for macos and windows * fix(double-conversion): Upgrade bundled double-conversion #3313 * ci fixes * #3314: NetSSL_OpenSSL: any.pem certificate error: ca md too weak * testReuseSession: remove bad checks for session reuse * investigate failing test * investigate failing test * investigate failing test * investigate failing test * ci * remove travis and appveyor * ci, readme * ci fixes * fix ci * fix ci * fix ci * fix memory leak when ignoring test error/failure * fix ci * don't define UNREACHABLE as poco_bugcheck as it triggers 'control reaches end of non-void function' warning * add Linux cross build, build Data libs on macos * fix ci * add MySQL include/lib search paths for Homebrew * ci fixes * ci fixes * ci fixes * ci fixes * fix indluce paths for brew mysql * #3317: Data::MySQL MySQL headers and library search paths * fix ARM-Linux build config * fix MySQL.make * update FindMySQL.cmake * fix(SocketReactor): fix dataCollection test * chore: remove troubleshooting help leftovers * #3302: MSVC: Poco hides warnings (C4996) for the C++14 attribute [[deprecated]] * fix potential crash in testAsyncNotify: don't delete event object while async notification is still in progress * fix(PollSetTest): change connect to blocking * added ActiveRecord library and compiler * added dependencies file * update copyright dates * ActiveRecord: project files and fixes for MSVC * ci: enable ActiveRecord on Windows * fix(PollSetTest): remove poll timing check (fails on msvc ci) * fix ActiveRecord CMake build and configuration * feat(build): add gen directory (for generated sources) and macchina lib link dirs (if needed) * #3318: Data: Support Poco::UUID for data binding * ODBC tests for UUID, updated ActiveRecord projects * ActiveRecord user guide * update ActiveRecord documentation * documentation fixes * #3321: manually merge ODBC text encoding support * CppParser: merge changes from internal repository * updated Makefile * AbstractObserver::accepts() - add optional name parameter * fix SharedPtr::makeSharedArray() [merge from devel] * remove blank line * #2895, #2935: support OCSP stapling * style * clang support (merge from devel) * #3322: remove useless struct * link libmariadb instead of libmysql if headers indicate MariaDB * fix nullptr passed to memcmp/memcpy reported by ubsan * fix nullptr passed to memcmp/memcpy reported by ubsan * fix PageCompiler cross-compile; fix Content-Security-Policy header * remove Data release notes page * style, remove unused var * update docs * improve BLOB handling, clean-up code * fix(ICMPv4Packet): [asan] Undefined behavior in ICMPv4PacketImpl.cpp #3326 * fix(NumericString): Bug in NumericString with decSep != '.' #3159 * fix(HostEntry): DNS HostEntry returns multiple entries #3303 * fix(PollSet): #3248 #3249 * fix(NetworkInterface): Unterminated string possible in NetworkInterfaceImpl::setPhyParams() #3301 * style/whitespace * fix warnings * add version resources to executables * style * whitespace * update changelog * cpproj: also copy testsuite/include if it's there * branch off 1.11.1 * #3335: XML error when build 1.11.0 * #3353: add POCO_NO_FORK_EXEC CMake option * #3381: DNS::hostByAddress not thread-safe * #3400: fix std::localtime not thread safe * #3221: Crash reported on Windows in X509Certificate verification * #3344: [bug] MacOS bundle destination path is not set * #3360: Add POCO_PGSQL_{INCLUDE,LIB} variables * #3363: Fixed compilation error with MongoDB::Connection and Util::Application * #3377: Correct Poco::Path::configHome() and dataHome() documentation for Windows * #2823: error: implicit conversion from 'int' to 'float' changes value from 2147483647 to 2147483648 * #3425: Fixed suspend/resumeEvents pair in DirectoryWatcher * #2966: SocketReactor loads one core of CPU up to 100% * #3330: Poco::Data::ODBC::ODBCStatementImpl causes crash * use OpenSSL 1.1.1 on macOS * add missing include search path * upgrade bundled PCRE to 8.45 * upgrade bundled SQLite to 3.36.0 * updated changelog * fix brew OpenSSL version * branch off poco-1.11.2 * #3506: Upgrade bundled expat to 2.4.4 * manually merge #3448, part 1 (Crypto) * manually merge #3448, part 1 (NetSSL) * #3515: NetSSL_OpenSSL Testsuite: testInterop() and testProxy() fail due to changed certificate * #3448: fix version check * #3465: NetSSL_Win: bad error handling when decodeMessage() fails * #3458: encryptString() crash on redhat/centos 8 with FIPS enabled using md5 default digest * #3505: JSON::PrintHandler.value(bool) prints incorrect value * #3527: Upgrade bundled expat to 2.4.5 * #3470: bug in JSON ParseHandler.cpp (RFC 7159 should be valid) * #3507: Reference counting for bound configuration in Util::Option is broken * #3518: Expat version check in #defines incorrect * #3338: NamedMutex does not work on Linux distributions where fs.protected_regular=1 * CI: don't build PageCompiler in ARM cross build * detect ARM64 on Windows * updated README.md * ProGen: support generation of VS 2022 project files * ci: add windows 2022 * fix library name * remove unused CppUnit headers * added VS2022 project files * #3530: Upgrade bundled expat to 2.4.6 * #3538: Upgrade bundled expat to 2.4.7 * Add back NIOS2 double conversion detection to fix compile errors The commit558324f672
removed the nios2 support, which was originally added ine7b91e8125
This commit add it back. Signed-off-by: Julien Olivain <ju.o@free.fr> * #3466: DefinePlatformSpecific.cmake: handle RelWithDebInfo and MinSizeRel configurations * #3524: remove XML and Util dependencies in Zip/SevenZip * #3483: Adds Windows 11 and Server 2022 to Environment::osDisplayName() * #3495: Array::operator[] should not throw * #3268: Poco redis command set have a bug when you want to set nx ex or expireTime * #3509: fix dst and utcOffset handling for Dublin time zone * #2882: another attempt at fixing it that should also work on other platforms * remove unused method in Timezone_WIN32.cpp * use tm_gmtoff on Linux * Basic support for OpenSSL 3.0.0 (#3448) * updated README.md * Create close-inactive-issues.yml * check return codes of EVP_CIPHER_CTX_new and EVP_CipherInit Especially with OpenSSL 3, it is possible that EVP_CipherInit may fail even when passed a non-null cipher[1]. Without the checking, it will finally get to a segfault. [1] https://github.com/openssl/openssl/issues/16864 * Automatically load default and legacy providers with OpenSSL 3 Without the legacy provider [1], some ciphers are not available. For example, the 'des-ecb' one used by test sutie is missed and the test will fail. [1] OSSL_PROVIDER-LEGACY(7ossl) * Make p12 ca order the same as pem OpenSSL < 3 returns p12 ca order in reversed order. This is fixed in OpenSSL 3. We work around it with old OpenSSL. See: https://github.com/openssl/openssl/issues/16421 https://github.com/openssl/openssl/pull/12641f5eb85eb0f
* Implement SSL abort handling on OpenSSL 3 On an unexpected EOF, versions before OpenSSL 3.0 returned SSL_ERROR_SYSCALL, nothing was added to the error stack, and errno was 0. Since OpenSSL 3.0 the returned error is SSL_ERROR_SSL with a meaningful error on the error stack.[1] [1] SSL_GET_ERROR(3ossl) Co-authored-by: Günter Obiltschnig <guenter.obiltschnig@appinf.com> Co-authored-by: Robin Lee <cheeselee@fedoraproject.org> Co-authored-by: Aleksandar Fabijanic <aleks-f@users.noreply.github.com> * fix(Socket): shutdown fixes from pull #3448 * #3500: Sandbox all iFrames in PocoDoc * #3549; replace assert with assertTrue * #3553: Upgrade bundled zlib to 1.2.12 * #3525: Bad management of file in case of OpenSSLException in X509Certificate::readPEM and X509Certificate::writePEM * disable OpenSSL deprecation warnings * chore: cleanup * fix(X509Certificate): add missing string format * #3559: Poco::Data::PostgreSQL - DateTime extraction truncates fractional seconds * feat(EVP): 3.0 support - add EVPCipher - additional EVPPKey constructors - tests - fix and improve openssl-related exceptions Transition towards 3.0 support; deprecating direct EC and RSA interface portions. * fix(openssl): pre 3.0 compile * feat(Envelope): Add envelope to crypto #3561 * fix(Envelope): mac/clang compile * fix(Any): #3297 #3514 * #3562: fixed OpenSSL setup/shutdown * fix exception text * #3563: Remove support for OpenSSL < 1.0 * ci jobs for OpenSSL 1.1 and 3 * updated CHANGELOG * updated .vscode * Refactor/any soo (#3564) * refactor(Any): SOO - encapsulate data holders - add missing gets and ops - eliminate g++ warnings with enable_if's - default enable SOO * refactor(Placeholder): encapsulate SOO memory management and fix leaks; cf. #3297 #3514 * fix(Placeholder): asan errors and add tests cf. #3297 #3514 * fix(SSLManager): Race condition in SSLManager #3558 * remove unused include * updated copyright date * PocoDoc: fix iframe sandboxing * fix(SHA2Engine): cannot use HMACEngine with SHA2Engine #3421 * refactor(Placeholder): ifdef POCO_NO_SOO only in Placeholder and remove it anywhere else (#3566) * refactor(Placeholder): more SOO consolidation and optimization * fix(FPEnvironment): Visual Studio Warning C4244 #3543 * fix(Extractor): move extraction decoding to AbstractExtractor #3396 * Netssl/openssl3 (#3575) * feat(Context): DH init openssl3 port (1/2 hardcoded params) * create poco-1.11.3 branch, bump version * update copyright date * #3567: check legacy provider existence for legacy exception #3567 * fix(Placeholder): comparison for zero value * feat(Context): DH init openssl3 port (2/2 params from file) * test(HTTPSClientSession): try/catch to understand CI failure * chore(cmake): copy the DH parameters file * fix(OpenSSLInitializer): unload provider on uninitialize * chore(HTTPSClientSessionTest): remove try/catch * fix(OpenSSLInitializer): fix provider unloading * feat(CppUnit): make tests exceptions more descriptive * chore(CppUnit): a more descriptive name for callback Co-authored-by: Günter Obiltschnig <guenter.obiltschnig@appinf.com> * fix(Foundation): update VS 2019 platform version * chore(Data): update VS project files (add Transcoder #3396) * fix(Data): Poco::Data::ODBC-dbEncoding property not used for insert/update #3396 * fix(Data): add transcoder to Makefile #3396 * fix(JWT): remove duplicate test functions after merge Co-authored-by: Günter Obiltschnig <guenter.obiltschnig@appinf.com> Co-authored-by: Julien Olivain <ju.o@free.fr> Co-authored-by: Robin Lee <robinlee.sysu@gmail.com> Co-authored-by: Robin Lee <cheeselee@fedoraproject.org>
515 lines
16 KiB
CMake
515 lines
16 KiB
CMake
cmake_minimum_required(VERSION 3.5.0)
|
|
|
|
project(Poco)
|
|
|
|
file(STRINGS "${PROJECT_SOURCE_DIR}/libversion" SHARED_LIBRARY_VERSION)
|
|
# Read the version information from the VERSION file
|
|
file(STRINGS "${PROJECT_SOURCE_DIR}/VERSION" PACKAGE_VERSION)
|
|
string(REGEX REPLACE "([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" CPACK_PACKAGE_VERSION_MAJOR ${PACKAGE_VERSION})
|
|
string(REGEX REPLACE "[0-9]+\\.([0-9]+)\\.[0-9]+.*" "\\1" CPACK_PACKAGE_VERSION_MINOR ${PACKAGE_VERSION})
|
|
string(REGEX REPLACE "[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" CPACK_PACKAGE_VERSION_PATCH ${PACKAGE_VERSION})
|
|
|
|
set(PROJECT_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
|
|
set(RELEASE_NAME "Unstable-trunk")
|
|
|
|
# Put the libaries and binaries that get built into directories at the
|
|
# top of the build tree rather than in hard-to-find leaf
|
|
# directories. This simplifies manual testing and the use of the build
|
|
# tree rather than installed Boost libraries.
|
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
|
# Windows DLLs are "runtime" for CMake. Output them to "bin" like the Visual Studio projects do.
|
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
|
|
|
# Append our module directory to CMake
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
|
|
|
if(CMAKE_VERSION VERSION_LESS "3.10")
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/V39)
|
|
endif()
|
|
if(CMAKE_VERSION VERSION_LESS "3.14")
|
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/V313)
|
|
endif()
|
|
#################################################################################
|
|
# Setup C/C++ compiler options
|
|
#################################################################################
|
|
|
|
# C++11/14 compiler flags
|
|
include(CXX1x)
|
|
check_for_cxx14_compiler(CXX14_COMPILER)
|
|
|
|
# If a C++14 compiler is available, then set the appropriate flags
|
|
if(CXX14_COMPILER)
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
else()
|
|
message(FATAL_ERROR "Compiler does not support C++14.")
|
|
endif()
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
set(CMAKE_BUILD_TYPE "RelWithDebInfo")
|
|
endif()
|
|
|
|
# Enable standard installation directories
|
|
include(GNUInstallDirs)
|
|
|
|
# Include some common macros to simpilfy the Poco CMake files
|
|
include(PocoMacros)
|
|
|
|
if(POCO_STATIC)
|
|
message(WARNING "POCO_STATIC has been deprecated. Please use BUILD_SHARED_LIBS=NO to build static libraries.")
|
|
option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
|
|
else()
|
|
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
|
endif()
|
|
|
|
if(MSVC)
|
|
option(POCO_MT "Set to OFF|ON (default is OFF) to control build of POCO as /MT instead of /MD" OFF)
|
|
|
|
if(BUILD_SHARED_LIBS AND POCO_MT)
|
|
message(FATAL_ERROR "Cannot have both BUILD_SHARED_LIBS and POCO_MT")
|
|
endif()
|
|
|
|
# allow disabling of internally built OpenSSL# (see below for details)
|
|
# if POCO pre-built OpenSSL directory is found, and POCO_DISABLE_INTERNAL_OPENSSL=OFF,
|
|
# the internal OpenSSL build will be used
|
|
option(POCO_DISABLE_INTERNAL_OPENSSL "Disable internal OpensSSL binaries use" ON)
|
|
|
|
if((NOT POCO_DISABLE_INTERNAL_OPENSSL) AND (ENABLE_NETSSL OR ENABLE_CRYPTO OR (ENABLE_DATA_MYSQL AND MINGW)))
|
|
include(UseEmbeddedOpenSSL)
|
|
endif()
|
|
endif()
|
|
|
|
option(ENABLE_NETSSL_WIN "Enable NetSSL Windows" OFF)
|
|
option(FORCE_OPENSSL "Force usage of OpenSSL even under windows" OFF)
|
|
|
|
if(ENABLE_CRYPTO OR ENABLE_NETSSL OR ENABLE_JWT)
|
|
find_package(OpenSSL REQUIRED)
|
|
else()
|
|
find_package(OpenSSL)
|
|
endif()
|
|
|
|
if(OPENSSL_FOUND)
|
|
option(ENABLE_NETSSL "Enable NetSSL" ON)
|
|
option(ENABLE_CRYPTO "Enable Crypto" ON)
|
|
option(ENABLE_JWT "Enable JWT" ON)
|
|
else()
|
|
option(ENABLE_NETSSL "Enable NetSSL" OFF)
|
|
option(ENABLE_CRYPTO "Enable Crypto" OFF)
|
|
option(ENABLE_JWT "Enable JWT" OFF)
|
|
endif()
|
|
|
|
if(ENABLE_APACHECONNECTOR)
|
|
find_package(APR REQUIRED)
|
|
find_package(APRUTIL REQUIRED)
|
|
find_package(Apache2 REQUIRED)
|
|
else()
|
|
find_package(APR)
|
|
find_package(APRUTIL)
|
|
find_package(Apache2)
|
|
endif()
|
|
|
|
if(APR_FOUND AND APRUTIL_FOUND AND APACHE2_FOUND AND
|
|
EXISTS ${PROJECT_SOURCE_DIR}/ApacheConnector AND ENABLE_APACHECONNECTOR)
|
|
option(ENABLE_APACHECONNECTOR "Enable ApacheConnector" ON)
|
|
else()
|
|
option(ENABLE_APACHECONNECTOR "Enable ApacheConnector" OFF)
|
|
endif()
|
|
|
|
if(ENABLE_DATA_MYSQL)
|
|
find_package(MySQL REQUIRED)
|
|
else()
|
|
find_package(MySQL)
|
|
endif()
|
|
|
|
if(MYSQL_FOUND)
|
|
option(ENABLE_DATA "Enable Data" ON)
|
|
option(ENABLE_DATA_MYSQL "Enable Data MySQL or MariaDB" ON)
|
|
else()
|
|
option(ENABLE_DATA "Enable Data" OFF)
|
|
option(ENABLE_DATA_MYSQL "Enable Data MySQL or MariaDB" OFF)
|
|
endif()
|
|
|
|
if(ENABLE_DATA_POSTGRESQL)
|
|
find_package(PostgreSQL REQUIRED)
|
|
else()
|
|
find_package(PostgreSQL)
|
|
endif()
|
|
|
|
if(PostgreSQL_FOUND)
|
|
option(ENABLE_DATA "Enable Data" ON)
|
|
option(ENABLE_DATA_POSTGRESQL "Enable Data PosgreSQL" ON)
|
|
else()
|
|
option(ENABLE_DATA "Enable Data" OFF)
|
|
option(ENABLE_DATA_POSTGRESQL "Enable Data PosgreSQL" OFF)
|
|
endif()
|
|
|
|
if(ENABLE_DATA_ODBC)
|
|
find_package(ODBC REQUIRED)
|
|
else()
|
|
find_package(ODBC)
|
|
endif()
|
|
|
|
if(ODBC_FOUND)
|
|
option(ENABLE_DATA "Enable Data" ON)
|
|
option(ENABLE_DATA_ODBC "Enable Data ODBC" ON)
|
|
else()
|
|
option(ENABLE_DATA "Enable Data" OFF)
|
|
option(ENABLE_DATA_ODBC "Enable Data ODBC" OFF)
|
|
endif()
|
|
|
|
# Allow enabling and disabling components
|
|
option(ENABLE_FOUNDATION "Enable Foundation, required by all components except CppUnit" ON)
|
|
option(ENABLE_ENCODINGS "Enable Encodings" ON)
|
|
option(ENABLE_ENCODINGS_COMPILER "Enable Encodings Compiler" OFF)
|
|
option(ENABLE_XML "Enable XML" ON)
|
|
option(ENABLE_JSON "Enable JSON" ON)
|
|
option(ENABLE_MONGODB "Enable MongoDB" ON)
|
|
option(ENABLE_DATA_SQLITE "Enable Data SQlite" ON)
|
|
option(ENABLE_REDIS "Enable Redis" ON)
|
|
option(ENABLE_PDF "Enable PDF" OFF)
|
|
option(ENABLE_UTIL "Enable Util" ON)
|
|
option(ENABLE_NET "Enable Net" ON)
|
|
|
|
option(ENABLE_SEVENZIP "Enable SevenZip" OFF)
|
|
option(ENABLE_ZIP "Enable Zip" ON)
|
|
option(ENABLE_CPPPARSER "Enable C++ parser" OFF)
|
|
option(ENABLE_POCODOC "Enable Poco Documentation Generator" OFF)
|
|
option(ENABLE_PAGECOMPILER "Enable PageCompiler" ON)
|
|
option(ENABLE_PAGECOMPILER_FILE2PAGE "Enable File2Page" ON)
|
|
|
|
option(ENABLE_ACTIVERECORD "Enable ActiveRecord" ON)
|
|
option(ENABLE_ACTIVERECORD_COMPILER "Enable ActiveRecord Compiler" ON)
|
|
|
|
if(ENABLE_ACTIVERECORD AND NOT ENABLE_DATA)
|
|
set(ENABLE_DATA ON CACHE BOOL "Enable Data" FORCE)
|
|
endif()
|
|
|
|
option(ENABLE_TESTS
|
|
"Set to OFF|ON (default is OFF) to control build of POCO tests & samples" OFF)
|
|
|
|
option(POCO_UNBUNDLED
|
|
"Set to OFF|ON (default is OFF) to control linking dependencies as external" OFF)
|
|
|
|
if(ENABLE_TESTS)
|
|
include(CTest)
|
|
enable_testing()
|
|
message(STATUS "Building with unittests & samples")
|
|
else()
|
|
message(STATUS "Building without tests & samples")
|
|
endif()
|
|
|
|
if(POCO_UNBUNDLED)
|
|
message(STATUS "Using external sqlite, zlib, pcre, expat, ...")
|
|
else()
|
|
message(STATUS "Using internal sqlite, zlib, pcre, expat, ...")
|
|
endif()
|
|
|
|
# Disable fork exec
|
|
option(POCO_NO_FORK_EXEC "Set to OFF|ON (default is OFF) to disable use of fork() and exec*() which are not allowed on some Apple platforms (iOS, watchOS, iPadOS, tvOS)." OFF)
|
|
|
|
if(POCO_NO_FORK_EXEC)
|
|
add_definitions(-DPOCO_NO_FORK_EXEC=1)
|
|
endif()
|
|
|
|
include(DefinePlatformSpecifc)
|
|
|
|
# Collect the built libraries and include dirs, the will be used to create the PocoConfig.cmake file
|
|
set(Poco_COMPONENTS "")
|
|
|
|
if(ENABLE_TESTS)
|
|
add_subdirectory(CppUnit)
|
|
set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE)
|
|
set(ENABLE_JSON ON CACHE BOOL "Enable JSON" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_ENCODINGS_COMPILER OR ENABLE_APACHECONNECTOR)
|
|
set(ENABLE_NET ON CACHE BOOL "Enable Net" FORCE)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_PAGECOMPILER_FILE2PAGE)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_PAGECOMPILER)
|
|
set(ENABLE_NET ON CACHE BOOL "Enable Net" FORCE)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_MONGODB OR ENABLE_REDIS)
|
|
set(ENABLE_NET ON CACHE BOOL "Enable Net" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_DATA_SQLITE OR ENABLE_DATA_MYSQL OR ENABLE_DATA_ODBC OR ENABLE_DATA_POSTGRESQL)
|
|
set(ENABLE_DATA ON CACHE BOOL "Enable Data" FORCE)
|
|
if(ENABLE_TESTS)
|
|
set(ENABLE_NET ON CACHE BOOL "Enable Net" FORCE)
|
|
set(ENABLE_DATA_SQLITE ON CACHE BOOL "Enable Data SQlite" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if(ENABLE_DATA AND ENABLE_TESTS)
|
|
set(ENABLE_DATA_SQLITE ON CACHE BOOL "Enable Data SQlite" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_ACTIVERECORD AND ENABLE_TESTS)
|
|
set(ENABLE_DATA_SQLITE ON CACHE BOOL "Enable Data SQlite" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_NETSSL_WIN)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
if(ENABLE_TESTS)
|
|
set(ENABLE_CRYPTO ON CACHE BOOL "Enable Crypto" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if(ENABLE_NETSSL)
|
|
set(ENABLE_CRYPTO ON CACHE BOOL "Enable Crypto" FORCE)
|
|
set(ENABLE_NET ON CACHE BOOL "Enable Net" FORCE)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_CRYPTO AND ENABLE_TESTS)
|
|
set(ENABLE_NETSSL ON CACHE BOOL "Enable NetSSL" FORCE)
|
|
set(ENABLE_NET ON CACHE BOOL "Enable Net" FORCE)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_NET AND ENABLE_TESTS)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_PDF)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_POCODOC)
|
|
set(ENABLE_UTIL ON CACHE BOOL "Enable Util" FORCE)
|
|
set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE)
|
|
set(ENABLE_CPPPARSER ON CACHE BOOL "Enable C++ parser" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_UTIL AND ENABLE_TESTS)
|
|
set(ENABLE_JSON ON CACHE BOOL "Enable JSON" FORCE)
|
|
set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_JWT)
|
|
set(ENABLE_CRYPTO ON CACHE BOOL "Enable Crypto" FORCE)
|
|
set(ENABLE_JSON ON CACHE BOOL "Enable JSON" FORCE)
|
|
endif()
|
|
|
|
if(ENABLE_FOUNDATION)
|
|
add_subdirectory(Foundation)
|
|
endif()
|
|
|
|
if(ENABLE_ENCODINGS)
|
|
add_subdirectory(Encodings)
|
|
list(APPEND Poco_COMPONENTS "Encodings")
|
|
endif()
|
|
|
|
if(ENABLE_XML)
|
|
add_subdirectory(XML)
|
|
list(APPEND Poco_COMPONENTS "XML")
|
|
endif()
|
|
|
|
if(ENABLE_JSON)
|
|
add_subdirectory(JSON)
|
|
list(APPEND Poco_COMPONENTS "JSON")
|
|
endif()
|
|
|
|
if(ENABLE_UTIL)
|
|
add_subdirectory(Util)
|
|
list(APPEND Poco_COMPONENTS "Util")
|
|
endif()
|
|
|
|
if(ENABLE_NET)
|
|
add_subdirectory(Net)
|
|
list(APPEND Poco_COMPONENTS "Net")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/MongoDB AND ENABLE_MONGODB)
|
|
add_subdirectory(MongoDB)
|
|
list(APPEND Poco_COMPONENTS "MongoDB")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/Redis AND ENABLE_REDIS)
|
|
add_subdirectory(Redis)
|
|
list(APPEND Poco_COMPONENTS "Redis")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/PDF AND ENABLE_PDF)
|
|
add_subdirectory(PDF)
|
|
list(APPEND Poco_COMPONENTS "PDF")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/JWT AND ENABLE_JWT)
|
|
add_subdirectory(JWT)
|
|
list(APPEND Poco_COMPONENTS "JWT")
|
|
endif()
|
|
|
|
#NetSSL
|
|
|
|
if(WIN32 AND EXISTS ${PROJECT_SOURCE_DIR}/NetSSL_Win AND ENABLE_NETSSL_WIN)
|
|
add_subdirectory(NetSSL_Win)
|
|
list(APPEND Poco_COMPONENTS "NetSSL_Win")
|
|
endif(WIN32 AND EXISTS ${PROJECT_SOURCE_DIR}/NetSSL_Win AND ENABLE_NETSSL_WIN)
|
|
|
|
if(OPENSSL_FOUND)
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/NetSSL_OpenSSL AND ENABLE_NETSSL)
|
|
add_subdirectory(NetSSL_OpenSSL)
|
|
list(APPEND Poco_COMPONENTS "NetSSL_OpenSSL")
|
|
endif()
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/Crypto AND ENABLE_CRYPTO)
|
|
add_subdirectory(Crypto)
|
|
list(APPEND Poco_COMPONENTS "Crypto")
|
|
endif()
|
|
endif(OPENSSL_FOUND)
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/Data AND ENABLE_DATA)
|
|
add_subdirectory(Data)
|
|
list(APPEND Poco_COMPONENTS "Data")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/ActiveRecord AND ENABLE_ACTIVERECORD)
|
|
add_subdirectory(ActiveRecord)
|
|
list(APPEND Poco_COMPONENTS "ActiveRecord")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/ActiveRecord/Compiler AND ENABLE_ACTIVERECORD_COMPILER)
|
|
add_subdirectory(ActiveRecord/Compiler)
|
|
list(APPEND Poco_COMPONENTS "ActiveRecordCompiler")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/SevenZip AND ENABLE_SEVENZIP)
|
|
add_subdirectory(SevenZip)
|
|
list(APPEND Poco_COMPONENTS "SevenZip")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/Zip AND ENABLE_ZIP)
|
|
add_subdirectory(Zip)
|
|
list(APPEND Poco_COMPONENTS "Zip")
|
|
endif()
|
|
|
|
if(APRUTIL_FOUND AND APACHE_FOUND AND
|
|
EXISTS ${PROJECT_SOURCE_DIR}/ApacheConnector AND ENABLE_APACHECONNECTOR)
|
|
add_subdirectory(ApacheConnector)
|
|
list(APPEND Poco_COMPONENTS "ApacheConnector")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/CppParser AND ENABLE_CPPPARSER)
|
|
add_subdirectory(CppParser)
|
|
list(APPEND Poco_COMPONENTS "CppParser")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/PocoDoc AND ENABLE_POCODOC)
|
|
add_subdirectory(PocoDoc)
|
|
list(APPEND Poco_COMPONENTS "PocoDoc")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/PageCompiler AND ENABLE_PAGECOMPILER)
|
|
add_subdirectory(PageCompiler)
|
|
list(APPEND Poco_COMPONENTS "PageCompiler")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/PageCompiler/File2Page AND ENABLE_PAGECOMPILER_FILE2PAGE)
|
|
add_subdirectory(PageCompiler/File2Page)
|
|
list(APPEND Poco_COMPONENTS "File2Page")
|
|
endif()
|
|
|
|
if(EXISTS ${PROJECT_SOURCE_DIR}/Encodings/Compiler AND ENABLE_ENCODINGS_COMPILER)
|
|
add_subdirectory(Encodings/Compiler)
|
|
list(APPEND Poco_COMPONENTS "EncodingsCompiler")
|
|
endif()
|
|
|
|
|
|
#############################################################
|
|
# Uninstall stuff see: http://www.vtk.org/Wiki/CMake_FAQ
|
|
configure_file(
|
|
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
IMMEDIATE @ONLY)
|
|
|
|
add_custom_target(uninstall
|
|
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
|
|
)
|
|
|
|
#############################################################
|
|
# Enable packaging
|
|
|
|
if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
|
|
include(InstallRequiredSystemLibraries)
|
|
endif()
|
|
|
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Poco Libraries")
|
|
set(CPACK_PACKAGE_VENDOR "Applied Informatics Software Engineering GmbH")
|
|
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
|
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
|
set(CPACK_PACKAGE_INSTALL_DIRECTORY "/usr/local")
|
|
|
|
include(CPack)
|
|
|
|
#############################################################
|
|
# cmake config files
|
|
|
|
include(CMakePackageConfigHelpers)
|
|
write_basic_package_version_file(
|
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake"
|
|
VERSION ${PROJECT_VERSION}
|
|
COMPATIBILITY AnyNewerVersion
|
|
)
|
|
|
|
# Set config script install location in a location that find_package() will
|
|
# look for, which is different on MS Windows than for UNIX
|
|
# Note: also set in POCO_GENERATE_PACKAGE macro in cmake/PocoMacros.cmake
|
|
if(WIN32)
|
|
set(PocoConfigPackageLocation "cmake")
|
|
else()
|
|
set(PocoConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}")
|
|
endif()
|
|
|
|
configure_file(cmake/${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake" @ONLY)
|
|
install(
|
|
FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}Config.cmake
|
|
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}/${PROJECT_NAME}ConfigVersion.cmake
|
|
DESTINATION
|
|
"${PocoConfigPackageLocation}"
|
|
COMPONENT
|
|
Devel
|
|
)
|
|
|
|
if(POCO_UNBUNDLED)
|
|
install(FILES cmake/FindPCRE.cmake
|
|
DESTINATION "${PocoConfigPackageLocation}")
|
|
install(FILES cmake/V39/FindEXPAT.cmake
|
|
DESTINATION "${PocoConfigPackageLocation}/V39")
|
|
install(FILES cmake/V313/FindSQLite3.cmake
|
|
DESTINATION "${PocoConfigPackageLocation}/V313")
|
|
endif()
|
|
|
|
message(STATUS "CMake ${CMAKE_VERSION} successfully configured ${PROJECT_NAME} using ${CMAKE_GENERATOR} generator")
|
|
message(STATUS "${PROJECT_NAME} package version: ${PROJECT_VERSION}")
|
|
if(BUILD_SHARED_LIBS)
|
|
message(STATUS "Building dynamic libraries")
|
|
else()
|
|
message(STATUS "Building static libraries")
|
|
endif()
|
|
message(STATUS "[cmake] Installation target path: ${CMAKE_INSTALL_PREFIX}")
|
|
if(CMAKE_TOOLCHAIN_FILE)
|
|
message(STATUS "[cmake] Use toolchain file: ${CMAKE_TOOLCHAIN_FILE}")
|
|
endif()
|
|
message(STATUS "[cmake] Build for OS type: ${CMAKE_SYSTEM_NAME}")
|
|
message(STATUS "[cmake] Build for OS version: ${CMAKE_SYSTEM_VERSION}")
|
|
message(STATUS "[cmake] Build for CPU type: ${CMAKE_SYSTEM_PROCESSOR}")
|
|
message(STATUS "[cmake] Build type: ${CMAKE_BUILD_TYPE}")
|
|
string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE)
|
|
message(STATUS "[cmake] Build with cxx flags: ${CMAKE_CXX_FLAGS_${BUILD_TYPE}} ${CMAKE_CXX_FLAGS}")
|
|
message(STATUS "[cmake] Build with c flags: ${CMAKE_C_FLAGS_${BUILD_TYPE}} ${CMAKE_C_FLAGS}")
|
|
|
|
foreach(component ${Poco_COMPONENTS})
|
|
message(STATUS "Building: ${component}")
|
|
endforeach()
|