diff --git a/CMakeLists.txt b/CMakeLists.txt index 7dd0f4d457..3b0571dfc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(Bro) ######################################################################## ## CMake Configuration -cmake_minimum_required(VERSION 2.8 FATAL_ERROR) +cmake_minimum_required(VERSION 2.6 FATAL_ERROR) # Prohibit in-source builds. if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") diff --git a/cmake/ChangeMacInstallNames.cmake b/cmake/ChangeMacInstallNames.cmake deleted file mode 100644 index 1e7370d3e7..0000000000 --- a/cmake/ChangeMacInstallNames.cmake +++ /dev/null @@ -1,87 +0,0 @@ -# Calling this macro with the name of a list variable will modify that -# list such that any third party libraries that do not come with a -# vanilla Mac OS X system will be replaced by an adjusted library that -# has an install_name relative to the location of any executable that -# links to it. -# -# Also, it will schedule the modified libraries for installation in a -# 'support_libs' subdirectory of the CMAKE_INSTALL_PREFIX. -# -# The case of third party libraries depending on other third party -# libraries is currently not handled by this macro. -# -# Ex. -# -# set(libs /usr/lib/libz.dylib -# /usr/lib/libssl.dylib -# /usr/local/lib/libmagic.dylib -# /usr/local/lib/libGeoIP.dylib -# /usr/local/lib/somestaticlib.a) -# -# include(ChangeMacInstallNames) -# ChangeMacInstallNames(libs) -# -# Should result in ${libs} containing: -# /usr/lib/libz.dylib -# /usr/lib/libssl.dylib -# ${CMAKE_BINARY_DIR}/darwin_support_libs/libmagic.dylib -# ${CMAKE_BINARY_DIR}/darwin_support_libs/libGeoIP.dylib -# /usr/local/lib/somestaticlib.a -# -# such that we can now do: -# -# add_executable(some_exe ${srcs}) -# target_link_libraries(some_exe ${libs}) -# -# Any binary packages created from such a build should be self-contained -# and provide working installs on vanilla OS X systems. - -macro(ChangeMacInstallNames libListVar) - if (APPLE) - find_program(INSTALL_NAME_TOOL install_name_tool) - - set(MAC_INSTALL_NAME_DEPS) - set(SUPPORT_BIN_DIR ${CMAKE_BINARY_DIR}/darwin_support_libs) - set(SUPPORT_INSTALL_DIR support_libs) - - file(MAKE_DIRECTORY ${SUPPORT_BIN_DIR}) - - foreach (_lib ${${libListVar}}) - # only care about install_name for shared libraries that are - # not shipped in Apple's vanilla OS X installs - string(REGEX MATCH ^/usr/lib/* apple_provided_lib ${_lib}) - string(REGEX MATCH dylib$ is_shared_lib ${_lib}) - - if (NOT apple_provided_lib AND is_shared_lib) - get_filename_component(_libname ${_lib} NAME) - set(_adjustedLib ${SUPPORT_BIN_DIR}/${_libname}) - set(_tmpLib - ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/${_libname}) - - # make a tempory copy so we can adjust permissions - configure_file(${_lib} ${_tmpLib} COPYONLY) - - # copy to build directory with correct write permissions - file(COPY ${_tmpLib} - DESTINATION ${SUPPORT_BIN_DIR} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE - GROUP_READ WORLD_READ) - - # remove the old library from the list provided as macro - # argument and add the new library with modified install_name - list(REMOVE_ITEM ${libListVar} ${_lib}) - list(APPEND ${libListVar} ${_adjustedLib}) - - # update the install target to install the third party libs - # with modified install_name - install(FILES ${_adjustedLib} - DESTINATION ${SUPPORT_INSTALL_DIR}) - - # perform the install_name change - execute_process(COMMAND install_name_tool -id - @executable_path/../${SUPPORT_INSTALL_DIR}/${_libname} - ${_adjustedLib}) - endif () - endforeach () - endif () -endmacro() diff --git a/cmake/FindFLEX.cmake b/cmake/FindFLEX.cmake new file mode 100644 index 0000000000..c56e8edad8 --- /dev/null +++ b/cmake/FindFLEX.cmake @@ -0,0 +1,179 @@ +# - Find flex executable and provides a macro to generate custom build rules +# +# The module defines the following variables: +# FLEX_FOUND - true is flex executable is found +# FLEX_EXECUTABLE - the path to the flex executable +# FLEX_VERSION - the version of flex +# FLEX_LIBRARIES - The flex libraries +# +# The minimum required version of flex can be specified using the +# standard syntax, e.g. FIND_PACKAGE(FLEX 2.5.13) +# +# +# If flex is found on the system, the module provides the macro: +# FLEX_TARGET(Name FlexInput FlexOutput [COMPILE_FLAGS ]) +# which creates a custom command to generate the file from +# the file. If COMPILE_FLAGS option is specified, the next +# parameter is added to the flex command line. Name is an alias used to +# get details of this custom command. Indeed the macro defines the +# following variables: +# FLEX_${Name}_DEFINED - true is the macro ran successfully +# FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an +# alias for FlexOutput +# FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput} +# +# Flex scanners oftenly use tokens defined by Bison: the code generated +# by Flex depends of the header generated by Bison. This module also +# defines a macro: +# ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget) +# which adds the required dependency between a scanner and a parser +# where and are the first parameters of +# respectively FLEX_TARGET and BISON_TARGET macros. +# +# ==================================================================== +# Example: +# +# find_package(BISON) +# find_package(FLEX) +# +# BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp +# FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BIANRY_DIR}/lexer.cpp) +# ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser) +# +# include_directories(${CMAKE_CURRENT_BINARY_DIR}) +# add_executable(Foo +# Foo.cc +# ${BISON_MyParser_OUTPUTS} +# ${FLEX_MyScanner_OUTPUTS} +# ) +# ==================================================================== + +#============================================================================= +# Copyright 2009 Kitware, Inc. +# Copyright 2006 Tristan Carel +# Modified 2010 by Jon Siwek, backporting for CMake 2.6 compat +# +# Distributed under the OSI-approved BSD License (the "License"): +# CMake - Cross Platform Makefile Generator +# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium +# All rights reserved. + +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the names of Kitware, Inc., the Insight Software Consortium, +# nor the names of their contributors may be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# This software is distributed WITHOUT ANY WARRANTY; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the License for more information. +#============================================================================= + +FIND_PROGRAM(FLEX_EXECUTABLE flex DOC "path to the flex executable") +MARK_AS_ADVANCED(FLEX_EXECUTABLE) + +FIND_LIBRARY(FL_LIBRARY NAMES fl + DOC "path to the fl library") +MARK_AS_ADVANCED(FL_LIBRARY) +SET(FLEX_LIBRARIES ${FL_LIBRARY}) + +IF(FLEX_EXECUTABLE) + + EXECUTE_PROCESS(COMMAND ${FLEX_EXECUTABLE} --version + OUTPUT_VARIABLE FLEX_version_output + ERROR_VARIABLE FLEX_version_error + RESULT_VARIABLE FLEX_version_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + IF(NOT ${FLEX_version_result} EQUAL 0) + IF(FLEX_FIND_REQUIRED) + MESSAGE(SEND_ERROR "Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}") + ELSE() + MESSAGE("Command \"${FLEX_EXECUTABLE} --version\" failed with output:\n${FLEX_version_output}\n${FLEX_version_error}\nFLEX_VERSION will not be available") + ENDIF() + ELSE() + STRING(REGEX REPLACE "^flex (.*)$" "\\1" + FLEX_VERSION "${FLEX_version_output}") + ENDIF() + + #============================================================ + # FLEX_TARGET (public macro) + #============================================================ + # + MACRO(FLEX_TARGET Name Input Output) + SET(FLEX_TARGET_usage "FLEX_TARGET( [COMPILE_FLAGS ]") + IF(${ARGC} GREATER 3) + IF(${ARGC} EQUAL 5) + IF("${ARGV3}" STREQUAL "COMPILE_FLAGS") + SET(FLEX_EXECUTABLE_opts "${ARGV4}") + SEPARATE_ARGUMENTS(FLEX_EXECUTABLE_opts) + ELSE() + MESSAGE(SEND_ERROR ${FLEX_TARGET_usage}) + ENDIF() + ELSE() + MESSAGE(SEND_ERROR ${FLEX_TARGET_usage}) + ENDIF() + ENDIF() + + ADD_CUSTOM_COMMAND(OUTPUT ${Output} + COMMAND ${FLEX_EXECUTABLE} + ARGS ${FLEX_EXECUTABLE_opts} -o${Output} ${Input} + DEPENDS ${Input} + COMMENT "[FLEX][${Name}] Building scanner with flex ${FLEX_VERSION}" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + + SET(FLEX_${Name}_DEFINED TRUE) + SET(FLEX_${Name}_OUTPUTS ${Output}) + SET(FLEX_${Name}_INPUT ${Input}) + SET(FLEX_${Name}_COMPILE_FLAGS ${FLEX_EXECUTABLE_opts}) + ENDMACRO(FLEX_TARGET) + #============================================================ + + + #============================================================ + # ADD_FLEX_BISON_DEPENDENCY (public macro) + #============================================================ + # + MACRO(ADD_FLEX_BISON_DEPENDENCY FlexTarget BisonTarget) + + IF(NOT FLEX_${FlexTarget}_OUTPUTS) + MESSAGE(SEND_ERROR "Flex target `${FlexTarget}' does not exists.") + ENDIF() + + IF(NOT BISON_${BisonTarget}_OUTPUT_HEADER) + MESSAGE(SEND_ERROR "Bison target `${BisonTarget}' does not exists.") + ENDIF() + + SET_SOURCE_FILES_PROPERTIES(${FLEX_${FlexTarget}_OUTPUTS} + PROPERTIES OBJECT_DEPENDS ${BISON_${BisonTarget}_OUTPUT_HEADER}) + ENDMACRO(ADD_FLEX_BISON_DEPENDENCY) + #============================================================ + +ENDIF(FLEX_EXECUTABLE) + +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(FLEX FLEX_EXECUTABLE + FLEX_VERSION) + +# FindFLEX.cmake ends here diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 576ad1a844..81ed0d81af 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -387,9 +387,6 @@ set(brolibs ${OPTLIBS} ) -include(ChangeMacInstallNames) -ChangeMacInstallNames(brolibs) - target_link_libraries(bro ${brolibs}) install(TARGETS bro DESTINATION bin)