1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
|
project(Broccoli C)
cmake_minimum_required(VERSION 2.6.3 FATAL_ERROR)
include(cmake/CommonCMakeConfig.cmake)
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" VERSION LIMIT_COUNT 1)
set(SOVersion 5) # this must be incremented when broccoli interface changes
set(SOVersionMinor 1)
set(SOVersionRelease 0)
set(BRO_SYSCONF_DIR ${BRO_ETC_INSTALL_DIR})
if (NOT BRO_SYSCONF_FILE)
# BRO_SYSCONF_FILE not already defined from the --with-configfile option
set(BRO_SYSCONF_FILE ${BRO_SYSCONF_DIR}/broccoli.conf)
endif ()
site_name(hostname)
if (UNIX)
execute_process(COMMAND date OUTPUT_VARIABLE builddate
OUTPUT_STRIP_TRAILING_WHITESPACE)
else ()
set(builddate "build date not available")
endif ()
set(BUILDINFO "${hostname}, ${builddate}, Debugging support: ${ENABLE_DEBUG}")
# if no static/shared library preference is given, default to building both
if (NOT DEFINED ENABLE_SHARED)
set(ENABLE_SHARED true)
endif ()
if (NOT DEFINED ENABLE_STATIC)
set(ENABLE_STATIC true)
endif ()
# Offer the user the choice of overriding the installation directories
set(INSTALL_LIB_DIR lib CACHE PATH "Installation directory for libraries")
if (NOT IS_ABSOLUTE "${INSTALL_LIB_DIR}")
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_DIR}")
endif()
########################################################################
## Dependency Configuration
include(FindRequiredPackage)
FindRequiredPackage(OpenSSL)
FindRequiredPackage(FLEX)
FindRequiredPackage(BISON)
find_package(PCAP)
set(BRO_PCAP_SUPPORT true)
if (NOT PCAP_INCLUDE_DIR)
set(BRO_PCAP_SUPPORT false)
endif ()
if (MISSING_PREREQS)
foreach (prereq ${MISSING_PREREQ_DESCS})
message(SEND_ERROR ${prereq})
endforeach ()
message(FATAL_ERROR "Configuration aborted due to missing prerequisites")
endif ()
########################################################################
## System Introspection
if (${CMAKE_SYSTEM_NAME} MATCHES "BSD")
set(BSD_HOST true)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set(LINUX_HOST true)
elseif (${CMAKE_SYSTEM_NAME} MATCHES "Solaris")
set(BRO_LIBADD socket nsl)
elseif (MINGW)
set(BRO_LIBADD wsock32)
endif ()
include(TestBigEndian)
test_big_endian(WORDS_BIGENDIAN)
include(CheckFunctionExists)
check_function_exists(geteuid HAVE_GETEUID)
check_function_exists(getpwuid HAVE_GETPWUID)
include(CheckTypeSize)
set(CMAKE_EXTRA_INCLUDE_FILES sys/types.h)
check_type_size(uint UINT)
if (NOT UINT)
set (TYPEDEF_UINT "typedef unsigned int uint")
endif ()
set(CMAKE_EXTRA_INCLUDE_FILES)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
${CMAKE_CURRENT_BINARY_DIR}/config.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config-file.h.in
${CMAKE_CURRENT_BINARY_DIR}/config-file.h)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/broccoli-config.in
${CMAKE_CURRENT_BINARY_DIR}/broccoli-config
@ONLY)
include_directories(BEFORE ${CMAKE_CURRENT_BINARY_DIR})
add_definitions(-DHAVE_CONFIG_H)
########################################################################
## Install Files
include(InstallPackageConfigFile)
InstallPackageConfigFile(
${CMAKE_CURRENT_SOURCE_DIR}/broccoli.conf
${BRO_SYSCONF_DIR}
broccoli.conf)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/broccoli-config DESTINATION bin)
########################################################################
## Recurse on sub-directories
add_subdirectory(src)
add_subdirectory(test)
add_subdirectory(doc)
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bindings/broccoli-python/CMakeLists.txt
AND NOT DISABLE_PYTHON_BINDINGS)
add_subdirectory(bindings/broccoli-python)
else ()
message(STATUS "Not building broccoli-python bindings")
endif ()
if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/bindings/broccoli-ruby/CMakeLists.txt
AND NOT DISABLE_RUBY_BINDINGS)
add_subdirectory(bindings/broccoli-ruby)
else ()
message(STATUS "Not building broccoli-ruby bindings")
endif ()
########################################################################
## Packaging Setup
# If this CMake project is a sub-project of another, we will not
# configure the generic packaging because CPack will fail in the case
# that the parent project has already configured packaging
if ("${PROJECT_SOURCE_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
include(ConfigurePackaging)
ConfigurePackaging(${VERSION})
endif ()
########################################################################
## Build Summary
if (CMAKE_BUILD_TYPE)
string(TOUPPER ${CMAKE_BUILD_TYPE} BuildType)
endif ()
message(
"\n=================| Broccoli Build Summary |==================="
"\n"
"\nInstall prefix: ${CMAKE_INSTALL_PREFIX}"
"\nLibrary prefix: ${INSTALL_LIB_DIR}"
"\nDebug mode: ${ENABLE_DEBUG}"
"\nShared libs: ${ENABLE_SHARED}"
"\nStatic libs: ${ENABLE_STATIC}"
"\n"
"\nConfig file: ${BRO_SYSCONF_FILE}"
"\nPacket support: ${BRO_PCAP_SUPPORT}"
"\n"
"\nCC: ${CMAKE_C_COMPILER}"
"\nCFLAGS: ${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${BuildType}}"
"\nCPP: ${CMAKE_C_COMPILER}"
"\n"
"\n================================================================\n"
)
include(UserChangedWarning)
|