151 lines
5.4 KiB
CMake
151 lines
5.4 KiB
CMake
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()
|
|
|
|
if (APPLE)
|
|
LIST(APPEND RE_SRCS "${RE_SRC_PREFIX}/lock/rwlock.c")
|
|
|
|
# get MacOSX version
|
|
execute_process(COMMAND /usr/bin/sw_vers -productVersion
|
|
OUTPUT_VARIABLE MACOSX_VERSION
|
|
ERROR_VARIABLE MACOSX_VERSION_errors
|
|
RESULT_VARIABLE MACOSX_VERSION_result
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
# build universal binaries
|
|
set(CMAKE_OSX_ARCHITECTURES "x86_64;i386")
|
|
|
|
if (${MACOSX_VERSION} VERSION_LESS 10.9)
|
|
foreach(FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS)
|
|
set(${FLAGS} "${${FLAGS}} -mmacosx-version-min=10.6 -stdlib=libstdc++")
|
|
endforeach()
|
|
else()
|
|
foreach(FLAGS CMAKE_C_FLAGS CMAKE_CXX_FLAGS CMAKE_EXE_LINKER_FLAGS CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS)
|
|
set(${FLAGS} "${${FLAGS}} -mmacosx-version-min=10.7 -stdlib=libc++")
|
|
endforeach()
|
|
endif()
|
|
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}
|
|
)
|