88
99project (Poco)
1010
11- cmake_minimum_required (VERSION 2.8 .0 )
11+ cmake_minimum_required (VERSION 3.0 .0 )
1212
1313file (STRINGS "${CMAKE_SOURCE_DIR } /libversion" SHARED_LIBRARY_VERSION )
1414
@@ -75,12 +75,18 @@ option(ENABLE_PDF "Enable PDF" ON)
7575option (ENABLE_UTIL "Enable Util" ON )
7676option (ENABLE_NET "Enable Net" ON )
7777option (ENABLE_NETSSL "Enable NetSSL" ON )
78+ option (ENABLE_NETSSL_WIN "Enable NetSSL Windows" ON )
7879option (ENABLE_CRYPTO "Enable Crypto" ON )
7980option (ENABLE_DATA "Enable Data" ON )
81+ option (ENABLE_DATA_SQLITE "Enable Data SQlite" ON )
82+ option (ENABLE_DATA_MYSQL "Enable Data MySQL" ON )
83+ option (ENABLE_DATA_ODBC "Enable Data ODBC" ON )
8084option (ENABLE_SEVENZIP "Enable SevenZip" ON )
8185option (ENABLE_ZIP "Enable Zip" ON )
8286option (ENABLE_APACHECONNECTOR "Enable ApacheConnector" ON )
8387
88+ option (FORCE_OPENSSL "Force usage of OpenSSL even under windows" OFF )
89+
8490option (ENABLE_TESTS
8591 "Set to OFF|ON (default is OFF) to control build of POCO tests & samples" OFF )
8692
@@ -115,32 +121,21 @@ else ()
115121 message (STATUS "Build with using internal copy of sqlite, libz, pcre, expat, ..." )
116122endif ()
117123
118- # Set local include path
119- include_directories ( CppUnit/include CppUnit/WinTestRunner/include Foundation/include XML/include Net/include NetSSL_OpenSSL/include Util/include Data/include Data/MySQL/include Data/SQLite/include Data/ODBC/include Zip/include Crypto/include Web/include JSON/include MongoDB/include PDF/include SevenZip/include )
120-
121124include (CheckTypeSize )
122125find_package (Cygwin )
123126
124- #include(CMakeDetermineCompilerId)
125-
126127# OS Detection
127- if (CMAKE_SYSTEM MATCHES "Windows" )
128-
129- add_definitions ( -DPOCO_OS_FAMILY_WINDOWS )
130- set (SYSLIBS iphlpapi gdi32 odbc32)
131-
132- if (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
133- message (STATUS "XXX: MS Visual Compiler detected" )
134- endif (CMAKE_C_COMPILER_ID MATCHES "MSVC" )
128+ if (WIN32 )
129+ add_definitions ( -DPOCO_OS_FAMILY_WINDOWS -DUNICODE -D_UNICODE )
130+ #set(SYSLIBS iphlpapi gdi32 odbc32)
131+ endif (WIN32 )
135132
136- endif (CMAKE_SYSTEM MATCHES "Windows" )
137-
138- if (CMAKE_SYSTEM MATCHES "Linux" AND NOT ANDROID )
133+ if (UNIX AND NOT ANDROID )
139134 add_definitions ( -DPOCO_OS_FAMILY_UNIX )
140135 # Standard 'must be' defines
141136 add_definitions ( -D_XOPEN_SOURCE=500 -D_REENTRANT -D_THREAD_SAFE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 )
142137 set (SYSLIBS pthread dl rt)
143- endif (CMAKE_SYSTEM MATCHES "Linux" AND NOT ANDROID )
138+ endif (UNIX AND NOT ANDROID )
144139
145140if (CMAKE_SYSTEM MATCHES "SunOS" )
146141 add_definitions ( -DPOCO_OS_FAMILY_UNIX )
@@ -150,15 +145,15 @@ if (CMAKE_SYSTEM MATCHES "SunOS")
150145endif (CMAKE_SYSTEM MATCHES "SunOS" )
151146
152147if (CMAKE_COMPILER_IS_MINGW)
153- add_definitions (-DWC_NO_BEST_FIT_CHARS=0x400 -DPOCO_WIN32_UTF8 )
154- add_definitions (-mno-cygwin -D_WIN32 -DMINGW32 -DWINVER=0x500 -DODBCVER=0x0300 -DPOCO_THREAD_STACK_SIZE -DFoundation_Config_INCLUDED )
148+ add_definitions (-DWC_NO_BEST_FIT_CHARS=0x400 -DPOCO_WIN32_UTF8 )
149+ add_definitions (-mno-cygwin -D_WIN32 -DMINGW32 -DWINVER=0x500 -DODBCVER=0x0300 -DPOCO_THREAD_STACK_SIZE -DFoundation_Config_INCLUDED )
155150 link_directories (/usr/local/lib /usr/lib )
156151 include_directories (/usr/local/include /usr/include )
157152endif (CMAKE_COMPILER_IS_MINGW )
158153
159- if (CMAKE_COMPILER_IS_CYGWIN )
154+ if (CYGWIN )
160155# add_definitions(-DWC_NO_BEST_FIT_CHARS=0x400 -DPOCO_WIN32_UTF8)
161- endif (CMAKE_COMPILER_IS_CYGWIN )
156+ endif (CYGWIN )
162157
163158# SunPro C++
164159if (${CMAKE_CXX_COMPILER_ID } MATCHES "SunPro" )
@@ -170,10 +165,14 @@ if (IOS)
170165 add_definitions ( -DPOCO_HAVE_IPv6 -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_STAT64 -DPOCO_NO_SHAREDLIBS -DPOCO_NO_NET_IFTYPES )
171166endif (IOS )
172167
173- #ANDROID
168+ #Android
174169if (ANDROID )
175170 add_definitions ( -DPOCO_ANDROID -DPOCO_NO_FPENVIRONMENT -DPOCO_NO_WSTRING -DPOCO_NO_SHAREDMEMORY )
176- endif ()
171+ endif (ANDROID )
172+
173+
174+ # Collect the built libraries and include dirs, the will be used to create the PocoConfig.cmake file
175+ set (Poco_COMPONENTS "" )
177176
178177if (ENABLE_TESTS)
179178 add_subdirectory (CppUnit )
@@ -182,43 +181,62 @@ endif ()
182181add_subdirectory (Foundation )
183182if (ENABLE_XML)
184183add_subdirectory (XML )
184+ list (APPEND Poco_COMPONENTS "XML" )
185185endif ()
186186if (ENABLE_JSON)
187187add_subdirectory (JSON )
188+ list (APPEND Poco_COMPONENTS "JSON" )
188189endif ()
189190if (ENABLE_MONGODB)
190191add_subdirectory (MongoDB )
192+ list (APPEND Poco_COMPONENTS "MongoDB" )
191193endif ()
192194if (ENABLE_PDF)
193195add_subdirectory (PDF )
196+ list (APPEND Poco_COMPONENTS "PDF" )
194197endif ()
195198if (ENABLE_UTIL)
196199add_subdirectory (Util )
200+ list (APPEND Poco_COMPONENTS "Util" )
197201endif ()
198202if (ENABLE_NET)
199203add_subdirectory (Net )
204+ list (APPEND Poco_COMPONENTS "Net" )
200205endif ()
201206
202- # OPENSSL_SSL_LIBRARY
207+
208+ #NetSSL
209+
210+
211+ if (WIN32 AND ENABLE_NETSSL_WIN)
212+ add_subdirectory (NetSSL_Win )
213+ list (APPEND Poco_COMPONENTS "NetSSL_Win" )
214+ endif (WIN32 AND ENABLE_NETSSL_WIN )
215+
203216find_package (OpenSSL )
204217if (OPENSSL_FOUND)
205218 include_directories ("${OPENSSL_INCLUDE_DIR} " )
206219 if (ENABLE_NETSSL)
207220 add_subdirectory (NetSSL_OpenSSL )
221+ list (APPEND Poco_COMPONENTS "NetSSL_OpenSSL" )
208222 endif ()
209223 if (ENABLE_CRYPTO)
210224 add_subdirectory (Crypto )
225+ list (APPEND Poco_COMPONENTS "Crypto" )
211226 endif ()
212227endif (OPENSSL_FOUND )
213228
214229if (ENABLE_DATA)
215230add_subdirectory (Data )
231+ list (APPEND Poco_COMPONENTS "Data" )
216232endif ()
217233if (ENABLE_SEVENZIP)
218234add_subdirectory (SevenZip )
235+ list (APPEND Poco_COMPONENTS "SevenZip" )
219236endif ()
220237if (ENABLE_ZIP)
221238add_subdirectory (Zip )
239+ list (APPEND Poco_COMPONENTS "Zip" )
222240endif ()
223241
224242find_package (APR )
@@ -227,6 +245,7 @@ if(APRUTIL_FOUND AND APACHE_FOUND)
227245 include_directories ( "${APACHE_INCLUDE_DIR} " "${APRUTIL_INCLUDE_DIR} " )
228246 if (ENABLE_APACHECONNECTOR)
229247 add_subdirectory (ApacheConnector )
248+ list (APPEND Poco_COMPONENTS "ApacheConnector" )
230249 endif ()
231250endif (APRUTIL_FOUND AND APACHE_FOUND )
232251
@@ -253,9 +272,38 @@ set(CPACK_PACKAGE_INSTALL_DIRECTORY "/usr/local")
253272
254273include (CPack )
255274
275+ #############################################################
276+ # cmake config files
277+
278+ include (CMakePackageConfigHelpers )
279+ write_basic_package_version_file (
280+ "${CMAKE_CURRENT_BINARY_DIR } /${PROJECT_NAME } /${PROJECT_NAME } ConfigVersion.cmake"
281+ VERSION ${PROJECT_VERSION }
282+ COMPATIBILITY AnyNewerVersion
283+ )
284+
285+ configure_file (cmake/${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR } /${PROJECT_NAME } /${PROJECT_NAME } Config.cmake" @ONLY )
286+ install (
287+ FILES
288+ ${CMAKE_CURRENT_BINARY_DIR } /${PROJECT_NAME } /${PROJECT_NAME } Config.cmake
289+ ${CMAKE_CURRENT_BINARY_DIR } /${PROJECT_NAME } /${PROJECT_NAME } ConfigVersion.cmake
290+ DESTINATION
291+ "lib/cmake/${PROJECT_NAME } "
292+ COMPONENT
293+ Devel
294+ )
295+
296+ # in tree build settings
297+ #configure_file(PocoBuildTreeSettings.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/PocoBuildTreeSettings.cmake @ONLY)
298+
299+
256300message (STATUS "CMake ${CMAKE_VERSION } successfully configured ${PROJECT_NAME } using ${CMAKE_GENERATOR } generator" )
257301message (STATUS "Installation target path: ${CMAKE_INSTALL_PREFIX } " )
258302
259303message (STATUS "C_FLAGS: =${CMAKE_C_FLAGS } " )
260304message (STATUS "CXX_FLAGS:=${CMAKE_CXX_FLAGS } " )
261305
306+ foreach (component ${Poco_COMPONENTS} )
307+ message (STATUS "Building: ${component} " )
308+ endforeach ()
309+
0 commit comments