adapted POCO C++ to biicode build system

This commit is contained in:
franchuti688
2015-03-31 12:25:52 +02:00
parent e26d1ffa13
commit ba8c37c31f
18 changed files with 1023 additions and 0 deletions

View File

@@ -0,0 +1,148 @@
macro(ENABLE_LIBRARIES )
if(NOT BII_LIB_SRC)
return()
endif()
string(FIND "${BII_LIB_SRC}" "Data/MySQL/include" MySQL_SINGLE_MATCHED )
IF(MySQL_SINGLE_MATCHED)
SET(ENABLE_DATA_MYSQL ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "Data/ODBC/include" ODBC_SINGLE_MATCHED)
IF(ODBC_SINGLE_MATCHED)
SET(ENABLE_DATA_ODBC ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "Data/SQLite/include" SQLite_SINGLE_MATCHED )
IF(SQLite_SINGLE_MATCHED)
SET(ENABLE_DATA_SQLITE ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "JSON/include" JSON_SINGLE_MATCHED )
IF(JSON_SINGLE_MATCHED)
SET(ENABLE_JSON ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "MongoDB/include" MONGODB_SINGLE_MATCHED )
IF(MONGODB_SINGLE_MATCHED)
SET(ENABLE_MONGODB ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "Util/include" UTIL_SINGLE_MATCHED )
IF(UTIL_SINGLE_MATCHED)
SET(ENABLE_UTIL ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "Net/include" NET_SINGLE_MATCHED )
IF(NET_SINGLE_MATCHED)
SET(ENABLE_NET ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "Zip/include" ZIP_SINGLE_MATCHED )
IF(ZIP_SINGLE_MATCHED)
SET(ENABLE_ZIP ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "ApacheConnector/include" APACHECONNECTOR_SINGLE_MATCHED )
IF(APACHECONNECTOR_SINGLE_MATCHED)
SET(ENABLE_APACHECONNECTOR ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "CppParser/include" CPPPARSER_SINGLE_MATCHED )
IF(CPPPARSER_SINGLE_MATCHED)
SET(ENABLE_CPPPARSER ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "XML/include" XML_SINGLE_MATCHED )
IF(XML_SINGLE_MATCHED)
SET(ENABLE_XML ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "Crypto/include" CRYPTO_SINGLE_MATCHED )
IF(CRYPTO_SINGLE_MATCHED)
SET(ENABLE_CRYPTO ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "Data/include" DATA_SINGLE_MATCHED )
IF(DATA_SINGLE_MATCHED)
SET(ENABLE_DATA ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "NetSSL_OpenSSL/include" NETSSL_OPENSSL_SINGLE_MATCHED )
IF(NETSSL_OPENSSL_SINGLE_MATCHED)
SET(ENABLE_NETSSL ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "NetSSL_Win/include" NETSSL_WIN_SINGLE_MATCHED )
IF(NETSSL_WIN_SINGLE_MATCHED)
SET(ENABLE_NETSSL_WIN ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "PDF/include" PDF_SINGLE_MATCHED )
IF(PDF_SINGLE_MATCHED)
SET(ENABLE_PDF ON)
ENDIF()
string(FIND "${BII_LIB_SRC}" "SevenZip/include" SEVENZIP_SINGLE_MATCHED )
IF(SEVENZIP_SINGLE_MATCHED)
SET(ENABLE_SEVENZIP ON)
ENDIF()
endmacro()
macro(FILTER_BII_LIB_SRC PATTERN)
if(NOT BII_LIB_SRC)
return()
endif()
SET(ALL_MATCHES )
foreach(RESOURCE_FILE ${BII_LIB_SRC})
set(SINGLE_MATCHED )
string(REGEX MATCH "${PATTERN}" SINGLE_MATCHED "${RESOURCE_FILE}")
IF(DEFINED SINGLE_MATCHED)
SET(ALL_MATCHES ${ALL_MATCHES} ${SINGLE_MATCHED})
ENDIF(DEFINED SINGLE_MATCHED)
endforeach(RESOURCE_FILE ${BII_LIB_SRC})
FOREACH(BAD_ITEM ${ALL_MATCHES})
LIST(REMOVE_ITEM BII_LIB_SRC ${BAD_ITEM})
ENDFOREACH(BAD_ITEM ${ALL_MATCHES})
endmacro()
# Delete all the bad implementations which biicode detects
macro(FILTER_BAD_DEPENDENCIES)
if(NOT BII_LIB_SRC)
return()
endif()
SET(BAD_DEPS_PATTERN "(.*)(_WIN32U|_UNIX|_POSIX|_STD|_C99|_DEC|_DUMMY|_SUN|_VMS|_WINCE|_WIN32|_VX|_Android|_HPUX)(.*)")
# First filter: selected the pattern "_WIN32" or similars
FILTER_BII_LIB_SRC(${BAD_DEPS_PATTERN})
# Second filter: special cases
SET(SPECIAL_BAD_DEPENDENCIES_WIN Foundation/include/Poco/SyslogChannel.h
Foundation/src/SyslogChannel.cpp
Foundation/include/Poco/OpcomChannel.h
Foundation/src/OpcomChannel.cpp)
SET(SPECIAL_BAD_DEPENDENCIES_UNIX Foundation/include/Poco/EventLogChannel.h
Foundation/src/EventLogChannel.cpp
Foundation/include/Poco/WindowsConsoleChannel.h
Foundation/src/WindowsConsoleChannel.cpp
Foundation/include/Poco/OpcomChannel.h
Foundation/src/OpcomChannel.cpp
Util/src/WinRegistryKey.cpp
Util/src/WinRegistryConfiguration.cpp
Util/src/WinService.cpp)
IF(WIN32)
FOREACH(SPECIAL_DEP ${SPECIAL_BAD_DEPENDENCIES_WIN})
list(FIND BII_LIB_SRC ${SPECIAL_DEP} DEP_MATCH)
if(DEP_MATCH)
LIST(REMOVE_ITEM BII_LIB_SRC ${SPECIAL_DEP})
endif()
ENDFOREACH()
ELSEIF(UNIX)
FOREACH(SPECIAL_DEP ${SPECIAL_BAD_DEPENDENCIES_UNIX})
list(FIND BII_LIB_SRC ${SPECIAL_DEP} DEP_MATCH)
if(DEP_MATCH)
LIST(REMOVE_ITEM BII_LIB_SRC ${SPECIAL_DEP})
endif()
ENDFOREACH()
ENDIF()
endmacro()

View File

@@ -0,0 +1 @@
TARGET_LINK_LIBRARIES(${BII_BLOCK_TARGET} INTERFACE ${OPENSSL_LIBRARIES})

41
biicode/cmake/Data.cmake Normal file
View File

@@ -0,0 +1,41 @@
if (NOT POCO_STATIC)
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DTHREADSAFE)
endif (NOT POCO_STATIC)
if(MSVC AND NOT(MSVC_VERSION LESS 1400))
set_source_files_properties(src/StatementImpl.cpp
PROPERTIES COMPILE_FLAGS "/bigobj")
endif()
if(ENABLE_DATA_SQLITE)
# SQlite3 is built in any case
include( SQLite )
endif(ENABLE_DATA_SQLITE)
if(ENABLE_DATA_MYSQL)
find_package(MySQL)
if(MYSQL_FOUND)
target_include_directories(${BII_BLOCK_TARGET} INTERFACE "${MYSQL_INCLUDE_DIR}")
message(STATUS "MySQL Support Enabled")
include( MySQL )
else()
message(STATUS "MySQL Support Disabled - no MySQL library")
endif(MYSQL_FOUND)
endif(ENABLE_DATA_MYSQL)
if(ENABLE_DATA_ODBC)
find_package(ODBC)
if(WIN32 AND NOT WINCE)
set(ODBC_LIBRARIES "odbc32" "odbccp32")
message(STATUS "Windows native ODBC Support Enabled")
include( ODBC )
else(WIN32 AND NOT WINCE)
if(ODBC_FOUND)
target_include_directories(${BII_BLOCK_TARGET} INTERFACE "${ODBC_INCLUDE_DIRECTORIES}")
message(STATUS "ODBC Support Enabled")
include( ODBC )
else()
message(STATUS "ODBC Support Disabled - no ODBC runtime")
endif()
endif(WIN32 AND NOT WINCE)
endif(ENABLE_DATA_ODBC)

View File

@@ -0,0 +1,16 @@
# If POCO_UNBUNDLED is enabled we try to find the required packages
# The configuration will fail if the packages are not found
if (POCO_UNBUNDLED)
find_package(PCRE REQUIRED)
set(SYSLIBS ${SYSLIBS} ${PCRE_LIBRARIES})
target_include_directories(${BII_BLOCK_TARGET} INTERFACE ${PCRE_INCLUDE_DIRS})
find_package(ZLIB REQUIRED)
set(SYSLIBS ${SYSLIBS} ${ZLIB_LIBRARIES})
target_include_directories(${BII_BLOCK_TARGET} INTERFACE ${ZLIB_INCLUDE_DIRS})
endif (POCO_UNBUNDLED)
if(WIN32)
set(SYSLIBS ${SYSLIBS} iphlpapi)
endif(WIN32)
target_link_libraries(${BII_BLOCK_TARGET} INTERFACE ${SYSLIBS})

View File

@@ -0,0 +1,2 @@
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DTHREADSAFE -DNO_TCL)
target_link_libraries( ${BII_BLOCK_TARGET} INTERFACE ${MYSQL_LIB})

View File

@@ -0,0 +1 @@
target_link_libraries(${BII_BLOCK_TARGET} INTERFACE Crypt32.lib)

2
biicode/cmake/ODBC.cmake Normal file
View File

@@ -0,0 +1,2 @@
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE ${ODBC_CFLAGS} -DTHREADSAFE)
target_link_libraries( ${BII_BLOCK_TARGET} INTERFACE ${ODBC_LIBRARIES})

6
biicode/cmake/PDF.cmake Normal file
View File

@@ -0,0 +1,6 @@
if (POCO_UNBUNDLED)
find_package(ZLIB REQUIRED)
set(SYSLIBS ${SYSLIBS} ${ZLIB_LIBRARIES})
include_directories(${ZLIB_INCLUDE_DIRS})
endif (POCO_UNBUNDLED)
target_link_libraries(${BII_BLOCK_TARGET} INTERFACE ${SYSLIBS} )

View File

@@ -0,0 +1,7 @@
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DSQLITE_THREADSAFE=1
-DSQLITE_DISABLE_LFS
-DSQLITE_OMIT_UTF16
-DSQLITE_OMIT_PROGRESS_CALLBACK
-DSQLITE_OMIT_COMPLETE
-DSQLITE_OMIT_TCL_VARIABLE
-DSQLITE_OMIT_DEPRECATED)

15
biicode/cmake/XML.cmake Normal file
View File

@@ -0,0 +1,15 @@
# If POCO_UNBUNDLED is enabled we try to find the required packages
# The configuration will fail if the packages are not found
if (POCO_UNBUNDLED)
find_package(EXPAT REQUIRED)
set(SYSLIBS ${SYSLIBS} ${EXPAT_LIBRARIES})
include_directories(${EXPAT_INCLUDE_DIRS})
endif (POCO_UNBUNDLED)
if(WIN32)
#TODO: Is XML_STATIC only required with Windows? What does it do?
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DXML_STATIC -DXML_NS -DXML_DTD -DHAVE_EXPAT_CONFIG_H)
else()
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DXML_NS -DXML_DTD -DHAVE_EXPAT_CONFIG_H)
endif()
target_link_libraries(${BII_BLOCK_TARGET} INTERFACE ${SYSLIBS})

View File

@@ -0,0 +1,84 @@
# Append biicode module directory to CMake
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake
${CMAKE_CURRENT_SOURCE_DIR}/biicode/cmake)
include(BiiPocoMacros)
FILTER_BAD_DEPENDENCIES()
# Actually create targets: EXEcutables and libraries.
ADD_BIICODE_TARGETS()
option(POCO_STATIC
"Set to OFF|ON (default is OFF) to control build of POCO as STATIC library" ON)
# Uncomment from next two lines to force statitc or dynamic library, default is autodetection
if(POCO_STATIC)
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DPOCO_STATIC -DPOCO_NO_AUTOMATIC_LIBS)
set( LIB_MODE STATIC )
message(STATUS "Building static libraries")
else(POCO_STATIC)
set( LIB_MODE SHARED )
message(STATUS "Building dynamic libraries")
endif(POCO_STATIC)
# OS Detection
if(WIN32)
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DPOCO_OS_FAMILY_WINDOWS -DUNICODE -D_UNICODE)
#set(SYSLIBS iphlpapi gdi32 odbc32)
endif(WIN32)
if (UNIX AND NOT ANDROID )
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DPOCO_OS_FAMILY_UNIX )
# Standard 'must be' defines
if (APPLE)
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DPOCO_HAVE_IPv6 -DPOCO_NO_STAT64)
set(SYSLIBS dl)
else (APPLE)
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -D_XOPEN_SOURCE=500 -D_REENTRANT -D_THREAD_SAFE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64)
set(SYSLIBS pthread dl rt)
endif (APPLE)
endif(UNIX AND NOT ANDROID )
if (CMAKE_COMPILER_IS_MINGW)
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -DWC_NO_BEST_FIT_CHARS=0x400 -DPOCO_WIN32_UTF8)
target_compile_definitions(${BII_BLOCK_TARGET} INTERFACE -D_WIN32 -DMINGW32 -DWINVER=0x500 -DODBCVER=0x0300 -DPOCO_THREAD_STACK_SIZE)
endif (CMAKE_COMPILER_IS_MINGW)
# Collect the built libraries and include dirs, the will be used to create the PocoConfig.cmake file
ENABLE_LIBRARIES()
include(Foundation)
if(ENABLE_XML)
include(XML)
endif()
if(ENABLE_PDF)
include(PDF)
endif()
#NetSSL
if(WIN32 AND ENABLE_NETSSL_WIN)
include(NetSSL_Win)
endif(WIN32 AND ENABLE_NETSSL_WIN)
find_package(OpenSSL)
if(OPENSSL_FOUND)
target_include_directories(${BII_BLOCK_TARGET} INTERFACE "${OPENSSL_INCLUDE_DIR}")
if(ENABLE_NETSSL)
target_link_libraries(${BII_BLOCK_TARGET} INTERFACE ${OPENSSL_SSL_LIBRARY})
endif()
if(ENABLE_CRYPTO)
include(Crypto)
endif()
endif(OPENSSL_FOUND)
if(ENABLE_DATA)
include(Data)
endif()
find_package(APR)
find_package(Apache2)
if(APRUTIL_FOUND AND APACHE_FOUND)
target_include_directories(${BII_BLOCK_TARGET} INTERFACE "${APACHE_INCLUDE_DIR}" "${APRUTIL_INCLUDE_DIR}" )
endif(APRUTIL_FOUND AND APACHE_FOUND)