added Cmake file
contributed by: Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de>
This commit is contained in:
parent
dc74f315ff
commit
7056e79a5d
1 changed files with 127 additions and 0 deletions
127
mk/CMakeLists.txt
Normal file
127
mk/CMakeLists.txt
Normal file
|
@ -0,0 +1,127 @@
|
|||
cmake_minimum_required(VERSION 2.8.2)
|
||||
|
||||
project(re)
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||
|
||||
SET(RE_ROOT ${PROJECT_SOURCE_DIR}/..)
|
||||
SET(RE_SRC_PREFIX ../src)
|
||||
|
||||
# include header files for the IDEs
|
||||
file(GLOB_RECURSE HEADER_FILES src/*.h include/*.h)
|
||||
|
||||
if(UNIX)
|
||||
# get make db and extract information via regex's
|
||||
execute_process(COMMAND make --no-print-directory --just-print --print-data-base info OUTPUT_VARIABLE RE_MAKEDB OUTPUT_STRIP_TRAILING_WHITESPACE WORKING_DIRECTORY ${RE_ROOT})
|
||||
|
||||
# get list of source files in SRCS = ...
|
||||
STRING(REGEX MATCH "[\n\r]SRCS = ([^\n\r]+)" RE_SRCS "${RE_MAKEDB}")
|
||||
STRING(REGEX REPLACE "[\n\r]SRCS = " "" RE_SRCS "${RE_SRCS}")
|
||||
# convert into list and prefix every element with 'src/'
|
||||
SET(RE_SRCS "${RE_SRC_PREFIX}/${RE_SRCS}")
|
||||
STRING(REPLACE " " ";${RE_SRC_PREFIX}/" RE_SRCS ${RE_SRCS})
|
||||
|
||||
# get CFLAGS
|
||||
STRING(REGEX MATCH "[\n\r]CFLAGS = ([^\n\r]+)" RE_CFLAGS "${RE_MAKEDB}")
|
||||
STRING(REGEX REPLACE "[\n\r]CFLAGS = " "" RE_CFLAGS "${RE_CFLAGS}")
|
||||
# remove anything that is not a macro define
|
||||
STRING(REGEX REPLACE "-[^D][^ ]*" "" RE_CFLAGS "${RE_CFLAGS}" )
|
||||
|
||||
# get EXTRA_CFLAGS
|
||||
STRING(REGEX MATCH "[\n\r]EXTRA_CFLAGS := ([^\n\r]+)" RE_EXTRA_CFLAGS "${RE_MAKEDB}")
|
||||
STRING(REGEX REPLACE "[\n\r]EXTRA_CFLAGS := " "" RE_EXTRA_CFLAGS "${RE_EXTRA_CFLAGS}")
|
||||
if (RE_EXTRA_CFLAGS)
|
||||
# not tested
|
||||
STRING(REGEX REPLACE "\\$\\(EXTRA_CFLAGS\\)" ${RE_EXTRA_CFLAGS} RE_CFLAGS "${RE_CFLAGS}")
|
||||
else()
|
||||
STRING(REGEX REPLACE "\\$\\(EXTRA_CFLAGS\\)" "" RE_CFLAGS "${RE_CFLAGS}")
|
||||
endif()
|
||||
|
||||
# get OS
|
||||
STRING(REGEX MATCH "[\n\r]OS := ([^\n\r]+)" RE_OS "${RE_MAKEDB}")
|
||||
STRING(REGEX REPLACE "[\n\r]OS := " "" RE_OS "${RE_OS}")
|
||||
STRING(REGEX REPLACE "\\$\\(OS\\)" ${RE_OS} RE_CFLAGS "${RE_CFLAGS}")
|
||||
|
||||
# get VERSION
|
||||
STRING(REGEX MATCH "[\n\r]VERSION := ([^\n\r]+)" RE_VERSION "${RE_MAKEDB}")
|
||||
STRING(REGEX REPLACE "[\n\r]VERSION := " "" RE_VERSION "${RE_VERSION}")
|
||||
STRING(REGEX REPLACE "\\$\\(VERSION\\)" ${RE_VERSION} RE_CFLAGS "${RE_CFLAGS}")
|
||||
|
||||
# get ARCH
|
||||
STRING(REGEX MATCH "[\n\r]ARCH := ([^\n\r]+)" RE_ARCH "${RE_MAKEDB}")
|
||||
STRING(REGEX REPLACE "[\n\r]ARCH := " "" RE_ARCH "${RE_ARCH}")
|
||||
STRING(REGEX REPLACE "\\$\\(ARCH\\)" ${RE_ARCH} RE_CFLAGS "${RE_CFLAGS}")
|
||||
|
||||
# escaping '\': makefiles do need it, but it breaks xcode - not sure who's "right"
|
||||
if (CMAKE_GENERATOR MATCHES Xcode)
|
||||
STRING(REGEX REPLACE "\\\\" "" RE_CFLAGS "${RE_CFLAGS}" )
|
||||
endif()
|
||||
|
||||
message("libre sources: ${RE_SRCS}")
|
||||
message("libre cflags: ${RE_CFLAGS}")
|
||||
message("libre extra_cflags: ${RE_EXTRA_CFLAGS}")
|
||||
message("libre OS: ${RE_OS}")
|
||||
message("libre arch: ${RE_ARCH}")
|
||||
message("libre version: ${RE_VERSION}")
|
||||
|
||||
elseif(WIN32)
|
||||
# hard-coded on Win32
|
||||
if(MSVC)
|
||||
SET(RE_CFLAGS
|
||||
"-DWIN32 -D_CONSOLE -D_CRT_SECURE_NO_DEPRECATE -DHAVE_SELECT -DHAVE_IO_H"
|
||||
)
|
||||
elseif(MINGW)
|
||||
SET(RE_CFLAGS
|
||||
"-DHAVE_STDBOOL_H -DHAVE_INET6 -DHAVE_SELECT -DHAVE_IO_H"
|
||||
)
|
||||
add_definitions(-Wall -D_WIN32_WINNT=0x0501)
|
||||
endif()
|
||||
# quotes get eaten in generator
|
||||
add_definitions(-DOS=\"win32\" -DWIN32 -DARCH=\"i386\" -DVERSION=\"0.3.0\")
|
||||
|
||||
# on windows we cannot rely on make and have to do this by hand
|
||||
file(GLOB_RECURSE RE_SRCS RELATIVE ${PROJECT_SOURCE_DIR} ${RE_ROOT}/src/*.c)
|
||||
|
||||
# remove files to compile depending on the compiler flags
|
||||
if (RE_CFLAGS MATCHES USE_ZLIB)
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/crc32/crc32.c")
|
||||
endif()
|
||||
|
||||
if (NOT RE_CFLAGS MATCHES HAVE_PTHREAD_RWLOCK)
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/lock/rwlock.c")
|
||||
endif()
|
||||
|
||||
if (NOT RE_CFLAGS MATCHES HAVE_GETIFADDRS)
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/net/ifaddrs.c")
|
||||
endif()
|
||||
|
||||
if (NOT RE_CFLAGS MATCHES HAVE_EPOLL)
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/main/epoll.c")
|
||||
endif()
|
||||
|
||||
if (NOT RE_CFLAGS MATCHES USE_OPENSSL)
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/tls/openssl/tls.c")
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/tls/openssl/tls_tcp.c")
|
||||
endif()
|
||||
|
||||
if (NOT RE_CFLAGS MATCHES HAVE_PTHREAD)
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/lock/lock.c")
|
||||
endif()
|
||||
|
||||
# remove files not to be comiled for win32 in any case
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/httpauth/basic.c")
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/mod/dl.c")
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/net/posix/pif.c")
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/net/linux/rt.c")
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/dns/res.c")
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/dns/darwin/srv.c")
|
||||
LIST(REMOVE_ITEM RE_SRCS "${RE_SRC_PREFIX}/net/bsd/brt.c")
|
||||
|
||||
endif()
|
||||
|
||||
include_directories(${RE_ROOT}/include)
|
||||
|
||||
add_library(re ${RE_SRCS} ${HEADER_FILES})
|
||||
|
||||
SET_TARGET_PROPERTIES(re PROPERTIES
|
||||
COMPILE_FLAGS ${RE_CFLAGS}
|
||||
)
|
Loading…
Add table
Reference in a new issue