diff --git a/CMakeCPackOptions.cmake b/CMakeCPackOptions.cmake index ec32740c..74150018 100644 --- a/CMakeCPackOptions.cmake +++ b/CMakeCPackOptions.cmake @@ -3,29 +3,45 @@ # # This file is part of falco . # -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. # if(CPACK_GENERATOR MATCHES "DEB") - list(APPEND CPACK_INSTALL_COMMANDS "mkdir -p _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/init.d/") - list(APPEND CPACK_INSTALL_COMMANDS "cp scripts/debian/falco _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/init.d") + list( + APPEND + CPACK_INSTALL_COMMANDS + "mkdir -p _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/init.d/" + ) + list( + APPEND + CPACK_INSTALL_COMMANDS + "cp scripts/debian/falco _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/init.d" + ) endif() if(CPACK_GENERATOR MATCHES "RPM") - list(APPEND CPACK_INSTALL_COMMANDS "mkdir -p _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/rc.d/init.d/") - list(APPEND CPACK_INSTALL_COMMANDS "cp scripts/rpm/falco _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/rc.d/init.d") + list( + APPEND + CPACK_INSTALL_COMMANDS + "mkdir -p _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/rc.d/init.d/" + ) + list( + APPEND + CPACK_INSTALL_COMMANDS + "cp scripts/rpm/falco _CPack_Packages/${CPACK_TOPLEVEL_TAG}/${CPACK_GENERATOR}/${CPACK_PACKAGE_FILE_NAME}/etc/rc.d/init.d" + ) endif() if(CPACK_GENERATOR MATCHES "TGZ") - set(CPACK_SET_DESTDIR "ON") - set(CPACK_STRIP_FILES "OFF") + set(CPACK_SET_DESTDIR "ON") + set(CPACK_STRIP_FILES "OFF") endif() diff --git a/CMakeLists.txt b/CMakeLists.txt index 5c36ded0..263778d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,17 +3,17 @@ # # This file is part of falco . # -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. # cmake_minimum_required(VERSION 2.8.2) @@ -22,26 +22,30 @@ project(falco) option(BUILD_WARNINGS_AS_ERRORS "Enable building with -Wextra -Werror flags") if(NOT DEFINED FALCO_VERSION) - set(FALCO_VERSION "0.1.1dev") + set(FALCO_VERSION "0.1.1dev") endif() if(NOT DEFINED FALCO_ETC_DIR) - set(FALCO_ETC_DIR "/etc/falco") + set(FALCO_ETC_DIR "/etc/falco") endif() if(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE Release) + set(CMAKE_BUILD_TYPE Release) endif() if(NOT DRAIOS_DEBUG_FLAGS) - set(DRAIOS_DEBUG_FLAGS "-D_DEBUG") + set(DRAIOS_DEBUG_FLAGS "-D_DEBUG") endif() set(CMAKE_COMMON_FLAGS "-Wall -ggdb ${DRAIOS_FEATURE_FLAGS}") if(BUILD_WARNINGS_AS_ERRORS) - set(CMAKE_SUPPRESSED_WARNINGS "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare -Wno-type-limits -Wno-implicit-fallthrough -Wno-format-truncation") - set(CMAKE_COMMON_FLAGS "${CMAKE_COMMON_FLAGS} -Wextra -Werror ${CMAKE_SUPPRESSED_WARNINGS}") + set( + CMAKE_SUPPRESSED_WARNINGS + "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-sign-compare -Wno-type-limits -Wno-implicit-fallthrough -Wno-format-truncation" + ) + set(CMAKE_COMMON_FLAGS + "${CMAKE_COMMON_FLAGS} -Wextra -Werror ${CMAKE_SUPPRESSED_WARNINGS}") endif() set(CMAKE_C_FLAGS "${CMAKE_COMMON_FLAGS}") @@ -56,65 +60,70 @@ set(CMAKE_CXX_FLAGS_RELEASE "-O3 -fno-strict-aliasing -DNDEBUG") add_definitions(-DPLATFORM_NAME="${CMAKE_SYSTEM_NAME}") add_definitions(-DK8S_DISABLE_THREAD) if(CMAKE_SYSTEM_NAME MATCHES "Linux") - add_definitions(-DHAS_CAPTURE) + add_definitions(-DHAS_CAPTURE) endif() if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(KBUILD_FLAGS "${DRAIOS_DEBUG_FLAGS} ${DRAIOS_FEATURE_FLAGS}") + set(KBUILD_FLAGS "${DRAIOS_DEBUG_FLAGS} ${DRAIOS_FEATURE_FLAGS}") else() - set(KBUILD_FLAGS "${DRAIOS_FEATURE_FLAGS}") + set(KBUILD_FLAGS "${DRAIOS_FEATURE_FLAGS}") endif() set(PACKAGE_NAME "falco") set(PROBE_VERSION "${FALCO_VERSION}") set(PROBE_NAME "falco-probe") set(PROBE_DEVICE_NAME "falco") -if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) - set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Default install path" FORCE) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX /usr CACHE PATH "Default install path" FORCE) endif() set(CMD_MAKE make) if(NOT SYSDIG_DIR) - set(SYSDIG_DIR "${PROJECT_SOURCE_DIR}/../sysdig") + set(SYSDIG_DIR "${PROJECT_SOURCE_DIR}/../sysdig") endif() # make luaJIT work on OS X if(APPLE) - set(CMAKE_EXE_LINKER_FLAGS "-pagezero_size 10000 -image_base 100000000") + set(CMAKE_EXE_LINKER_FLAGS "-pagezero_size 10000 -image_base 100000000") endif() include(ExternalProject) -option(USE_BUNDLED_DEPS "Enable bundled dependencies instead of using the system ones" ON) +option(USE_BUNDLED_DEPS + "Enable bundled dependencies instead of using the system ones" ON) # # zlib # -option(USE_BUNDLED_ZLIB "Enable building of the bundled zlib" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_ZLIB "Enable building of the bundled zlib" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_ZLIB) - find_path(ZLIB_INCLUDE zlib.h PATH_SUFFIXES zlib) - find_library(ZLIB_LIB NAMES z) - if(ZLIB_INCLUDE AND ZLIB_LIB) - message(STATUS "Found zlib: include: ${ZLIB_INCLUDE}, lib: ${ZLIB_LIB}") - else() - message(FATAL_ERROR "Couldn't find system zlib") - endif() + find_path(ZLIB_INCLUDE zlib.h PATH_SUFFIXES zlib) + find_library(ZLIB_LIB NAMES z) + if(ZLIB_INCLUDE AND ZLIB_LIB) + message(STATUS "Found zlib: include: ${ZLIB_INCLUDE}, lib: ${ZLIB_LIB}") + else() + message(FATAL_ERROR "Couldn't find system zlib") + endif() else() - set(ZLIB_SRC "${PROJECT_BINARY_DIR}/zlib-prefix/src/zlib") - message(STATUS "Using bundled zlib in '${ZLIB_SRC}'") - set(ZLIB_INCLUDE "${ZLIB_SRC}") - set(ZLIB_LIB "${ZLIB_SRC}/libz.a") - ExternalProject_Add(zlib - # START CHANGE for CVE-2016-9840, CVE-2016-9841, CVE-2016-9842, CVE-2016-9843 - URL "http://s3.amazonaws.com/download.draios.com/dependencies/zlib-1.2.11.tar.gz" - URL_MD5 "1c9f62f0778697a09d36121ead88e08e" - # END CHANGE for CVE-2016-9840, CVE-2016-9841, CVE-2016-9842, CVE-2016-9843 - CONFIGURE_COMMAND "./configure" - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "") + set(ZLIB_SRC "${PROJECT_BINARY_DIR}/zlib-prefix/src/zlib") + message(STATUS "Using bundled zlib in '${ZLIB_SRC}'") + set(ZLIB_INCLUDE "${ZLIB_SRC}") + set(ZLIB_LIB "${ZLIB_SRC}/libz.a") + ExternalProject_Add( + zlib + # START CHANGE for CVE-2016-9840, CVE-2016-9841, CVE-2016-9842, + # CVE-2016-9843 + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/zlib-1.2.11.tar.gz" + URL_MD5 "1c9f62f0778697a09d36121ead88e08e" + # END CHANGE for CVE-2016-9840, CVE-2016-9841, CVE-2016-9842, CVE-2016-9843 + CONFIGURE_COMMAND "./configure" + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "") endif() # @@ -122,26 +131,38 @@ endif() # option(USE_BUNDLED_JQ "Enable building of the bundled jq" ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_JQ) - find_path(JQ_INCLUDE jq.h PATH_SUFFIXES jq) - find_library(JQ_LIB NAMES jq) - if(JQ_INCLUDE AND JQ_LIB) - message(STATUS "Found jq: include: ${JQ_INCLUDE}, lib: ${JQ_LIB}") - else() - message(FATAL_ERROR "Couldn't find system jq") - endif() + find_path(JQ_INCLUDE jq.h PATH_SUFFIXES jq) + find_library(JQ_LIB NAMES jq) + if(JQ_INCLUDE AND JQ_LIB) + message(STATUS "Found jq: include: ${JQ_INCLUDE}, lib: ${JQ_LIB}") + else() + message(FATAL_ERROR "Couldn't find system jq") + endif() else() - set(JQ_SRC "${PROJECT_BINARY_DIR}/jq-prefix/src/jq") - message(STATUS "Using bundled jq in '${JQ_SRC}'") - set(JQ_INCLUDE "${JQ_SRC}") - set(JQ_LIB "${JQ_SRC}/.libs/libjq.a") - ExternalProject_Add(jq - URL "http://s3.amazonaws.com/download.draios.com/dependencies/jq-1.5.tar.gz" - URL_MD5 "0933532b086bd8b6a41c1b162b1731f9" - CONFIGURE_COMMAND ./configure --disable-maintainer-mode --enable-all-static --disable-dependency-tracking - BUILD_COMMAND ${CMD_MAKE} LDFLAGS=-all-static - BUILD_IN_SOURCE 1 - PATCH_COMMAND wget -O jq-1.5-fix-tokenadd.patch https://github.com/stedolan/jq/commit/8eb1367ca44e772963e704a700ef72ae2e12babd.patch && patch -i jq-1.5-fix-tokenadd.patch - INSTALL_COMMAND "") + set(JQ_SRC "${PROJECT_BINARY_DIR}/jq-prefix/src/jq") + message(STATUS "Using bundled jq in '${JQ_SRC}'") + set(JQ_INCLUDE "${JQ_SRC}") + set(JQ_LIB "${JQ_SRC}/.libs/libjq.a") + ExternalProject_Add( + jq + URL "http://s3.amazonaws.com/download.draios.com/dependencies/jq-1.5.tar.gz" + URL_MD5 "0933532b086bd8b6a41c1b162b1731f9" + CONFIGURE_COMMAND ./configure + --disable-maintainer-mode + --enable-all-static + --disable-dependency-tracking + BUILD_COMMAND ${CMD_MAKE} LDFLAGS=-all-static + BUILD_IN_SOURCE 1 + PATCH_COMMAND + wget + -O + jq-1.5-fix-tokenadd.patch + https://github.com/stedolan/jq/commit/8eb1367ca44e772963e704a700ef72ae2e12babd.patch + && + patch + -i + jq-1.5-fix-tokenadd.patch + INSTALL_COMMAND "") endif() set(JSONCPP_SRC "${SYSDIG_DIR}/userspace/libsinsp/third-party/jsoncpp") @@ -151,27 +172,28 @@ set(JSONCPP_LIB_SRC "${JSONCPP_SRC}/jsoncpp.cpp") # # nlohmann-json # -option(USE_BUNDLED_NJSON "Enable building of the bundled nlohmann-json" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_NJSON "Enable building of the bundled nlohmann-json" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_NJSON) - find_path(NJSON_INCLUDE json.hpp PATH_SUFFIXES nlohmann) - if(NJSON_INCLUDE) - message(STATUS "Found nlohmann-json: include: ${NJSON_INCLUDE}") - else() - message(FATAL_ERROR "Couldn't find system nlohmann-json") - endif() + find_path(NJSON_INCLUDE json.hpp PATH_SUFFIXES nlohmann) + if(NJSON_INCLUDE) + message(STATUS "Found nlohmann-json: include: ${NJSON_INCLUDE}") + else() + message(FATAL_ERROR "Couldn't find system nlohmann-json") + endif() else() - # No distinction needed for windows. The implementation is - # solely in json.hpp. - set(NJSON_SRC "${PROJECT_BINARY_DIR}/njson-prefix/src/njson") - message(STATUS "Using bundled nlohmann-json in '${NJSON_SRC}'") - set(NJSON_INCLUDE "${NJSON_SRC}/single_include") - ExternalProject_Add(njson - URL "http://download.draios.com/dependencies/njson-3.3.0.tar.gz" - URL_MD5 "e26760e848656a5da400662e6c5d999a" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "") + # No distinction needed for windows. The implementation is solely in json.hpp. + set(NJSON_SRC "${PROJECT_BINARY_DIR}/njson-prefix/src/njson") + message(STATUS "Using bundled nlohmann-json in '${NJSON_SRC}'") + set(NJSON_INCLUDE "${NJSON_SRC}/single_include") + ExternalProject_Add( + njson + URL "http://download.draios.com/dependencies/njson-3.3.0.tar.gz" + URL_MD5 "e26760e848656a5da400662e6c5d999a" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "") endif() # @@ -179,24 +201,37 @@ endif() # # we pull this in because libsinsp won't build without it -option(USE_BUNDLED_NCURSES "Enable building of the bundled ncurses" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_NCURSES "Enable building of the bundled ncurses" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_NCURSES) - set(CURSES_NEED_NCURSES TRUE) - find_package(Curses REQUIRED) - message(STATUS "Found ncurses: include: ${CURSES_INCLUDE_DIR}, lib: ${CURSES_LIBRARIES}") + set(CURSES_NEED_NCURSES TRUE) + find_package(Curses REQUIRED) + message( + STATUS + "Found ncurses: include: ${CURSES_INCLUDE_DIR}, lib: ${CURSES_LIBRARIES}") else() - set(CURSES_BUNDLE_DIR "${PROJECT_BINARY_DIR}/ncurses-prefix/src/ncurses") - set(CURSES_INCLUDE_DIR "${CURSES_BUNDLE_DIR}/include/") - set(CURSES_LIBRARIES "${CURSES_BUNDLE_DIR}/lib/libncurses.a") - message(STATUS "Using bundled ncurses in '${CURSES_BUNDLE_DIR}'") - ExternalProject_Add(ncurses - URL "http://s3.amazonaws.com/download.draios.com/dependencies/ncurses-6.0-20150725.tgz" - URL_MD5 "32b8913312e738d707ae68da439ca1f4" - CONFIGURE_COMMAND ./configure --without-cxx --without-cxx-binding --without-ada --without-manpages --without-progs --without-tests --with-terminfo-dirs=/etc/terminfo:/lib/terminfo:/usr/share/terminfo - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "") + set(CURSES_BUNDLE_DIR "${PROJECT_BINARY_DIR}/ncurses-prefix/src/ncurses") + set(CURSES_INCLUDE_DIR "${CURSES_BUNDLE_DIR}/include/") + set(CURSES_LIBRARIES "${CURSES_BUNDLE_DIR}/lib/libncurses.a") + message(STATUS "Using bundled ncurses in '${CURSES_BUNDLE_DIR}'") + ExternalProject_Add( + ncurses + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/ncurses-6.0-20150725.tgz" + URL_MD5 "32b8913312e738d707ae68da439ca1f4" + CONFIGURE_COMMAND + ./configure + --without-cxx + --without-cxx-binding + --without-ada + --without-manpages + --without-progs + --without-tests + --with-terminfo-dirs=/etc/terminfo:/lib/terminfo:/usr/share/terminfo + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "") endif() # @@ -205,421 +240,559 @@ endif() option(USE_BUNDLED_B64 "Enable building of the bundled b64" ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_B64) - find_path(B64_INCLUDE NAMES b64/encode.h) - find_library(B64_LIB NAMES b64) - if(B64_INCLUDE AND B64_LIB) - message(STATUS "Found b64: include: ${B64_INCLUDE}, lib: ${B64_LIB}") - else() - message(FATAL_ERROR "Couldn't find system b64") - endif() + find_path(B64_INCLUDE NAMES b64/encode.h) + find_library(B64_LIB NAMES b64) + if(B64_INCLUDE AND B64_LIB) + message(STATUS "Found b64: include: ${B64_INCLUDE}, lib: ${B64_LIB}") + else() + message(FATAL_ERROR "Couldn't find system b64") + endif() else() - set(B64_SRC "${PROJECT_BINARY_DIR}/b64-prefix/src/b64") - message(STATUS "Using bundled b64 in '${B64_SRC}'") - set(B64_INCLUDE "${B64_SRC}/include") - set(B64_LIB "${B64_SRC}/src/libb64.a") - ExternalProject_Add(b64 - URL "http://s3.amazonaws.com/download.draios.com/dependencies/libb64-1.2.src.zip" - URL_MD5 "a609809408327117e2c643bed91b76c5" - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "") + set(B64_SRC "${PROJECT_BINARY_DIR}/b64-prefix/src/b64") + message(STATUS "Using bundled b64 in '${B64_SRC}'") + set(B64_INCLUDE "${B64_SRC}/include") + set(B64_LIB "${B64_SRC}/src/libb64.a") + ExternalProject_Add( + b64 + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/libb64-1.2.src.zip" + URL_MD5 "a609809408327117e2c643bed91b76c5" + CONFIGURE_COMMAND "" + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "") endif() # # yamlcpp # -option(USE_BUNDLED_YAMLCPP "Enable building of the bundled yamlcpp" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_YAMLCPP "Enable building of the bundled yamlcpp" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_YAMLCPP) - find_path(YAMLCPP_INCLUDE_DIR NAMES yaml-cpp/yaml.h) - find_library(YAMLCPP_LIB NAMES yaml-cpp) - if(YAMLCPP_INCLUDE_DIR AND YAMLCPP_LIB) - message(STATUS "Found yamlcpp: include: ${YAMLCPP_INCLUDE_DIR}, lib: ${YAMLCPP_LIB}") - else() - message(FATAL_ERROR "Couldn't find system yamlcpp") - endif() + find_path(YAMLCPP_INCLUDE_DIR NAMES yaml-cpp/yaml.h) + find_library(YAMLCPP_LIB NAMES yaml-cpp) + if(YAMLCPP_INCLUDE_DIR AND YAMLCPP_LIB) + message( + STATUS + "Found yamlcpp: include: ${YAMLCPP_INCLUDE_DIR}, lib: ${YAMLCPP_LIB}") + else() + message(FATAL_ERROR "Couldn't find system yamlcpp") + endif() else() - set(YAMLCPP_SRC "${PROJECT_BINARY_DIR}/yamlcpp-prefix/src/yamlcpp") - message(STATUS "Using bundled yaml-cpp in '${YAMLCPP_SRC}'") - set(YAMLCPP_LIB "${YAMLCPP_SRC}/libyaml-cpp.a") - set(YAMLCPP_INCLUDE_DIR "${YAMLCPP_SRC}/include") - ExternalProject_Add(yamlcpp - URL "https://s3.amazonaws.com/download.draios.com/dependencies/yaml-cpp-yaml-cpp-0.6.2.tar.gz" - URL_MD5 "5b943e9af0060d0811148b037449ef82" - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "") + set(YAMLCPP_SRC "${PROJECT_BINARY_DIR}/yamlcpp-prefix/src/yamlcpp") + message(STATUS "Using bundled yaml-cpp in '${YAMLCPP_SRC}'") + set(YAMLCPP_LIB "${YAMLCPP_SRC}/libyaml-cpp.a") + set(YAMLCPP_INCLUDE_DIR "${YAMLCPP_SRC}/include") + ExternalProject_Add( + yamlcpp + URL + "https://s3.amazonaws.com/download.draios.com/dependencies/yaml-cpp-yaml-cpp-0.6.2.tar.gz" + URL_MD5 "5b943e9af0060d0811148b037449ef82" + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "") endif() # # OpenSSL # -option(USE_BUNDLED_OPENSSL "Enable building of the bundled OpenSSL" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_OPENSSL "Enable building of the bundled OpenSSL" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_OPENSSL) - find_package(OpenSSL REQUIRED) - message(STATUS "Found OpenSSL: include: ${OPENSSL_INCLUDE_DIR}, lib: ${OPENSSL_LIBRARIES}") + find_package(OpenSSL REQUIRED) + message( + STATUS + "Found OpenSSL: include: ${OPENSSL_INCLUDE_DIR}, lib: ${OPENSSL_LIBRARIES}" + ) else() - set(OPENSSL_BUNDLE_DIR "${PROJECT_BINARY_DIR}/openssl-prefix/src/openssl") - set(OPENSSL_INSTALL_DIR "${OPENSSL_BUNDLE_DIR}/target") - set(OPENSSL_INCLUDE_DIR "${PROJECT_BINARY_DIR}/openssl-prefix/src/openssl/include") - set(OPENSSL_LIBRARY_SSL "${OPENSSL_INSTALL_DIR}/lib/libssl.a") - set(OPENSSL_LIBRARY_CRYPTO "${OPENSSL_INSTALL_DIR}/lib/libcrypto.a") + set(OPENSSL_BUNDLE_DIR "${PROJECT_BINARY_DIR}/openssl-prefix/src/openssl") + set(OPENSSL_INSTALL_DIR "${OPENSSL_BUNDLE_DIR}/target") + set(OPENSSL_INCLUDE_DIR + "${PROJECT_BINARY_DIR}/openssl-prefix/src/openssl/include") + set(OPENSSL_LIBRARY_SSL "${OPENSSL_INSTALL_DIR}/lib/libssl.a") + set(OPENSSL_LIBRARY_CRYPTO "${OPENSSL_INSTALL_DIR}/lib/libcrypto.a") - message(STATUS "Using bundled openssl in '${OPENSSL_BUNDLE_DIR}'") + message(STATUS "Using bundled openssl in '${OPENSSL_BUNDLE_DIR}'") - ExternalProject_Add(openssl - # START CHANGE for CVE-2017-3735, CVE-2017-3731, CVE-2017-3737, CVE-2017-3738, CVE-2017-3736 - URL "http://s3.amazonaws.com/download.draios.com/dependencies/openssl-1.0.2n.tar.gz" - URL_MD5 "13bdc1b1d1ff39b6fd42a255e74676a4" - # END CHANGE for CVE-2017-3735, CVE-2017-3731, CVE-2017-3737, CVE-2017-3738, CVE-2017-3736 - CONFIGURE_COMMAND ./config shared --prefix=${OPENSSL_INSTALL_DIR} - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - INSTALL_COMMAND ${CMD_MAKE} install) + ExternalProject_Add( + openssl + # START CHANGE for CVE-2017-3735, CVE-2017-3731, CVE-2017-3737, + # CVE-2017-3738, CVE-2017-3736 + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/openssl-1.0.2n.tar.gz" + URL_MD5 "13bdc1b1d1ff39b6fd42a255e74676a4" + # END CHANGE for CVE-2017-3735, CVE-2017-3731, CVE-2017-3737, CVE-2017-3738, + # CVE-2017-3736 + CONFIGURE_COMMAND ./config shared --prefix=${OPENSSL_INSTALL_DIR} + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + INSTALL_COMMAND ${CMD_MAKE} install) endif() # # libcurl # -option(USE_BUNDLED_CURL "Enable building of the bundled curl" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_CURL "Enable building of the bundled curl" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_CURL) - find_package(CURL REQUIRED) - message(STATUS "Found CURL: include: ${CURL_INCLUDE_DIR}, lib: ${CURL_LIBRARIES}") + find_package(CURL REQUIRED) + message( + STATUS "Found CURL: include: ${CURL_INCLUDE_DIR}, lib: ${CURL_LIBRARIES}") else() - set(CURL_BUNDLE_DIR "${PROJECT_BINARY_DIR}/curl-prefix/src/curl") - set(CURL_INCLUDE_DIR "${CURL_BUNDLE_DIR}/include/") - set(CURL_LIBRARIES "${CURL_BUNDLE_DIR}/lib/.libs/libcurl.a") + set(CURL_BUNDLE_DIR "${PROJECT_BINARY_DIR}/curl-prefix/src/curl") + set(CURL_INCLUDE_DIR "${CURL_BUNDLE_DIR}/include/") + set(CURL_LIBRARIES "${CURL_BUNDLE_DIR}/lib/.libs/libcurl.a") - if(NOT USE_BUNDLED_OPENSSL) - set(CURL_SSL_OPTION "--with-ssl") - else() - set(CURL_SSL_OPTION "--with-ssl=${OPENSSL_INSTALL_DIR}") - message(STATUS "Using bundled curl in '${CURL_BUNDLE_DIR}'") - message(STATUS "Using SSL for curl in '${CURL_SSL_OPTION}'") - endif() + if(NOT USE_BUNDLED_OPENSSL) + set(CURL_SSL_OPTION "--with-ssl") + else() + set(CURL_SSL_OPTION "--with-ssl=${OPENSSL_INSTALL_DIR}") + message(STATUS "Using bundled curl in '${CURL_BUNDLE_DIR}'") + message(STATUS "Using SSL for curl in '${CURL_SSL_OPTION}'") + endif() - ExternalProject_Add(curl - DEPENDS openssl - # START CHANGE for CVE-2017-8816, CVE-2017-8817, CVE-2017-8818, CVE-2018-1000007 - URL "http://s3.amazonaws.com/download.draios.com/dependencies/curl-7.61.0.tar.bz2" - URL_MD5 "31d0a9f48dc796a7db351898a1e5058a" - # END CHANGE for CVE-2017-8816, CVE-2017-8817, CVE-2017-8818, CVE-2018-1000007 - CONFIGURE_COMMAND ./configure ${CURL_SSL_OPTION} --disable-shared --enable-optimize --disable-curldebug --disable-rt --enable-http --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smb --disable-smtp --disable-gopher --disable-sspi --disable-ntlm-wb --disable-tls-srp --without-winssl --without-darwinssl --without-polarssl --without-cyassl --without-nss --without-axtls --without-ca-path --without-ca-bundle --without-libmetalink --without-librtmp --without-winidn --without-libidn2 --without-libpsl --without-nghttp2 --without-libssh2 --disable-threaded-resolver --without-brotli - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "") + ExternalProject_Add( + curl + DEPENDS openssl + # START CHANGE for CVE-2017-8816, CVE-2017-8817, CVE-2017-8818, + # CVE-2018-1000007 + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/curl-7.61.0.tar.bz2" + URL_MD5 "31d0a9f48dc796a7db351898a1e5058a" + # END CHANGE for CVE-2017-8816, CVE-2017-8817, CVE-2017-8818, + # CVE-2018-1000007 + CONFIGURE_COMMAND ./configure + ${CURL_SSL_OPTION} + --disable-shared + --enable-optimize + --disable-curldebug + --disable-rt + --enable-http + --disable-ftp + --disable-file + --disable-ldap + --disable-ldaps + --disable-rtsp + --disable-telnet + --disable-tftp + --disable-pop3 + --disable-imap + --disable-smb + --disable-smtp + --disable-gopher + --disable-sspi + --disable-ntlm-wb + --disable-tls-srp + --without-winssl + --without-darwinssl + --without-polarssl + --without-cyassl + --without-nss + --without-axtls + --without-ca-path + --without-ca-bundle + --without-libmetalink + --without-librtmp + --without-winidn + --without-libidn2 + --without-libpsl + --without-nghttp2 + --without-libssh2 + --disable-threaded-resolver + --without-brotli + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "") endif() # # LuaJIT # -option(USE_BUNDLED_LUAJIT "Enable building of the bundled LuaJIT" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_LUAJIT "Enable building of the bundled LuaJIT" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_LUAJIT) - find_path(LUAJIT_INCLUDE luajit.h PATH_SUFFIXES luajit-2.0 luajit) - find_library(LUAJIT_LIB NAMES luajit luajit-5.1) - if(LUAJIT_INCLUDE AND LUAJIT_LIB) - message(STATUS "Found LuaJIT: include: ${LUAJIT_INCLUDE}, lib: ${LUAJIT_LIB}") - else() - # alternatively try stock Lua - find_package(Lua51) - set(LUAJIT_LIB ${LUA_LIBRARY}) - set(LUAJIT_INCLUDE ${LUA_INCLUDE_DIR}) + find_path(LUAJIT_INCLUDE luajit.h PATH_SUFFIXES luajit-2.0 luajit) + find_library(LUAJIT_LIB NAMES luajit luajit-5.1) + if(LUAJIT_INCLUDE AND LUAJIT_LIB) + message( + STATUS "Found LuaJIT: include: ${LUAJIT_INCLUDE}, lib: ${LUAJIT_LIB}") + else() + # alternatively try stock Lua + find_package(Lua51) + set(LUAJIT_LIB ${LUA_LIBRARY}) + set(LUAJIT_INCLUDE ${LUA_INCLUDE_DIR}) - if(NOT ${LUA51_FOUND}) - message(FATAL_ERROR "Couldn't find system LuaJIT or Lua") - endif() - endif() + if(NOT ${LUA51_FOUND}) + message(FATAL_ERROR "Couldn't find system LuaJIT or Lua") + endif() + endif() else() - set(LUAJIT_SRC "${PROJECT_BINARY_DIR}/luajit-prefix/src/luajit/src") - message(STATUS "Using bundled LuaJIT in '${LUAJIT_SRC}'") - set(LUAJIT_INCLUDE "${LUAJIT_SRC}") - set(LUAJIT_LIB "${LUAJIT_SRC}/libluajit.a") - ExternalProject_Add(luajit - URL "http://s3.amazonaws.com/download.draios.com/dependencies/LuaJIT-2.0.3.tar.gz" - URL_MD5 "f14e9104be513913810cd59c8c658dc0" - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - INSTALL_COMMAND "") + set(LUAJIT_SRC "${PROJECT_BINARY_DIR}/luajit-prefix/src/luajit/src") + message(STATUS "Using bundled LuaJIT in '${LUAJIT_SRC}'") + set(LUAJIT_INCLUDE "${LUAJIT_SRC}") + set(LUAJIT_LIB "${LUAJIT_SRC}/libluajit.a") + ExternalProject_Add( + luajit + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/LuaJIT-2.0.3.tar.gz" + URL_MD5 "f14e9104be513913810cd59c8c658dc0" + CONFIGURE_COMMAND "" + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + INSTALL_COMMAND "") endif() # # Lpeg # -option(USE_BUNDLED_LPEG "Enable building of the bundled lpeg" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_LPEG "Enable building of the bundled lpeg" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_LPEG) - find_library(LPEG_LIB NAMES lpeg.a) - if(LPEG_LIB) - message(STATUS "Found lpeg: lib: ${LPEG_LIB}") - else() - message(FATAL_ERROR "Couldn't find system lpeg") - endif() + find_library(LPEG_LIB NAMES lpeg.a) + if(LPEG_LIB) + message(STATUS "Found lpeg: lib: ${LPEG_LIB}") + else() + message(FATAL_ERROR "Couldn't find system lpeg") + endif() else() - set(LPEG_SRC "${PROJECT_BINARY_DIR}/lpeg-prefix/src/lpeg") - set(LPEG_LIB "${PROJECT_BINARY_DIR}/lpeg-prefix/src/lpeg/build/lpeg.a") - message(STATUS "Using bundled lpeg in '${LPEG_SRC}'") - set(LPEG_DEPENDENCIES "") - if(USE_BUNDLED_LUAJIT) - list(APPEND LPEG_DEPENDENCIES "luajit") - endif() - ExternalProject_Add(lpeg - DEPENDS ${LPEG_DEPENDENCIES} - URL "http://s3.amazonaws.com/download.draios.com/dependencies/lpeg-1.0.0.tar.gz" - URL_MD5 "0aec64ccd13996202ad0c099e2877ece" - BUILD_COMMAND LUA_INCLUDE=${LUAJIT_INCLUDE} "${PROJECT_SOURCE_DIR}/scripts/build-lpeg.sh" "${LPEG_SRC}/build" - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND "" - INSTALL_COMMAND "") + set(LPEG_SRC "${PROJECT_BINARY_DIR}/lpeg-prefix/src/lpeg") + set(LPEG_LIB "${PROJECT_BINARY_DIR}/lpeg-prefix/src/lpeg/build/lpeg.a") + message(STATUS "Using bundled lpeg in '${LPEG_SRC}'") + set(LPEG_DEPENDENCIES "") + if(USE_BUNDLED_LUAJIT) + list(APPEND LPEG_DEPENDENCIES "luajit") + endif() + ExternalProject_Add( + lpeg + DEPENDS ${LPEG_DEPENDENCIES} + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/lpeg-1.0.0.tar.gz" + URL_MD5 "0aec64ccd13996202ad0c099e2877ece" + BUILD_COMMAND LUA_INCLUDE=${LUAJIT_INCLUDE} + "${PROJECT_SOURCE_DIR}/scripts/build-lpeg.sh" + "${LPEG_SRC}/build" + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "" + INSTALL_COMMAND "") endif() # # Libyaml # -option(USE_BUNDLED_LIBYAML "Enable building of the bundled libyaml" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_LIBYAML "Enable building of the bundled libyaml" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_LIBYAML) - # Note: to distinguish libyaml.a and yaml.a we specify a full - # file name here, so you'll have to arrange for static - # libraries being available. - find_library(LIBYAML_LIB NAMES libyaml.a) - if(LIBYAML_LIB) - message(STATUS "Found libyaml: lib: ${LIBYAML_LIB}") - else() - message(FATAL_ERROR "Couldn't find system libyaml") - endif() + # Note: to distinguish libyaml.a and yaml.a we specify a full file name here, + # so you'll have to arrange for static libraries being available. + find_library(LIBYAML_LIB NAMES libyaml.a) + if(LIBYAML_LIB) + message(STATUS "Found libyaml: lib: ${LIBYAML_LIB}") + else() + message(FATAL_ERROR "Couldn't find system libyaml") + endif() else() - find_path(AUTORECONF_BIN NAMES autoreconf) - if(AUTORECONF_BIN) - message(STATUS "Found autoreconf: ${AUTORECONF_BIN}") - else() - message(FATAL_ERROR "Couldn't find system autoreconf. Please install autoreconf before continuing or use system libyaml") - endif() + find_path(AUTORECONF_BIN NAMES autoreconf) + if(AUTORECONF_BIN) + message(STATUS "Found autoreconf: ${AUTORECONF_BIN}") + else() + message( + FATAL_ERROR + "Couldn't find system autoreconf. Please install autoreconf before continuing or use system libyaml" + ) + endif() - set(LIBYAML_SRC "${PROJECT_BINARY_DIR}/libyaml-prefix/src/libyaml/src") - set(LIBYAML_INCLUDE "${PROJECT_BINARY_DIR}/libyaml-prefix/src/libyaml/include") - set(LIBYAML_LIB "${LIBYAML_SRC}/.libs/libyaml.a") - message(STATUS "Using bundled libyaml in '${LIBYAML_SRC}'") - ExternalProject_Add(libyaml - URL "http://s3.amazonaws.com/download.draios.com/dependencies/libyaml-0.1.4.tar.gz" - URL_MD5 "4a4bced818da0b9ae7fc8ebc690792a7" - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./bootstrap && ./configure - INSTALL_COMMAND "") + set(LIBYAML_SRC "${PROJECT_BINARY_DIR}/libyaml-prefix/src/libyaml/src") + set(LIBYAML_INCLUDE + "${PROJECT_BINARY_DIR}/libyaml-prefix/src/libyaml/include") + set(LIBYAML_LIB "${LIBYAML_SRC}/.libs/libyaml.a") + message(STATUS "Using bundled libyaml in '${LIBYAML_SRC}'") + ExternalProject_Add( + libyaml + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/libyaml-0.1.4.tar.gz" + URL_MD5 "4a4bced818da0b9ae7fc8ebc690792a7" + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND ./bootstrap && ./configure + INSTALL_COMMAND "") endif() # # lyaml # -option(USE_BUNDLED_LYAML "Enable building of the bundled lyaml" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_LYAML "Enable building of the bundled lyaml" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_LYAML) - # Note: to distinguish libyaml.a and yaml.a we specify a full - # file name here, so you'll have to arrange for static - # libraries being available. - find_library(LYAML_LIB NAMES yaml.a) - if(LYAML_LIB) - message(STATUS "Found lyaml: lib: ${LYAML_LIB}") - else() - message(FATAL_ERROR "Couldn't find system lyaml") - endif() + # Note: to distinguish libyaml.a and yaml.a we specify a full file name here, + # so you'll have to arrange for static libraries being available. + find_library(LYAML_LIB NAMES yaml.a) + if(LYAML_LIB) + message(STATUS "Found lyaml: lib: ${LYAML_LIB}") + else() + message(FATAL_ERROR "Couldn't find system lyaml") + endif() else() - set(LYAML_SRC "${PROJECT_BINARY_DIR}/lyaml-prefix/src/lyaml/ext/yaml") - set(LYAML_LIB "${LYAML_SRC}/.libs/yaml.a") - message(STATUS "Using bundled lyaml in '${LYAML_SRC}'") - set(LYAML_DEPENDENCIES "") - if(USE_BUNDLED_LUAJIT) - list(APPEND LYAML_DEPENDENCIES "luajit") - endif() - if(USE_BUNDLED_LIBYAML) - list(APPEND LYAML_DEPENDENCIES "libyaml") - endif() + set(LYAML_SRC "${PROJECT_BINARY_DIR}/lyaml-prefix/src/lyaml/ext/yaml") + set(LYAML_LIB "${LYAML_SRC}/.libs/yaml.a") + message(STATUS "Using bundled lyaml in '${LYAML_SRC}'") + set(LYAML_DEPENDENCIES "") + if(USE_BUNDLED_LUAJIT) + list(APPEND LYAML_DEPENDENCIES "luajit") + endif() + if(USE_BUNDLED_LIBYAML) + list(APPEND LYAML_DEPENDENCIES "libyaml") + endif() - ExternalProject_Add(lyaml - DEPENDS ${LYAML_DEPENDENCIES} - URL "http://s3.amazonaws.com/download.draios.com/dependencies/lyaml-release-v6.0.tar.gz" - URL_MD5 "dc3494689a0dce7cf44e7a99c72b1f30" - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - CONFIGURE_COMMAND ./configure --enable-static LIBS=-L${LIBYAML_SRC}/.libs CFLAGS=-I${LIBYAML_INCLUDE} CPPFLAGS=-I${LIBYAML_INCLUDE} LUA_INCLUDE=-I${LUAJIT_INCLUDE} LUA=${LUAJIT_SRC}/luajit - INSTALL_COMMAND sh -c "cp -R ${PROJECT_BINARY_DIR}/lyaml-prefix/src/lyaml/lib/* ${PROJECT_SOURCE_DIR}/userspace/engine/lua") + ExternalProject_Add( + lyaml + DEPENDS ${LYAML_DEPENDENCIES} + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/lyaml-release-v6.0.tar.gz" + URL_MD5 "dc3494689a0dce7cf44e7a99c72b1f30" + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND ./configure + --enable-static + LIBS=-L${LIBYAML_SRC}/.libs + CFLAGS=-I${LIBYAML_INCLUDE} + CPPFLAGS=-I${LIBYAML_INCLUDE} + LUA_INCLUDE=-I${LUAJIT_INCLUDE} + LUA=${LUAJIT_SRC}/luajit + INSTALL_COMMAND + sh -c + "cp -R ${PROJECT_BINARY_DIR}/lyaml-prefix/src/lyaml/lib/* ${PROJECT_SOURCE_DIR}/userspace/engine/lua" + ) endif() option(USE_BUNDLED_TBB "Enable building of the bundled tbb" ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_TBB) - find_path(TBB_INCLUDE_DIR tbb.h PATH_SUFFIXES tbb) - find_library(TBB_LIB NAMES tbb) - if(TBB_INCLUDE_DIR AND TBB_LIB) - message(STATUS "Found tbb: include: ${TBB_INCLUDE_DIR}, lib: ${TBB_LIB}") - else() - message(FATAL_ERROR "Couldn't find system tbb") - endif() + find_path(TBB_INCLUDE_DIR tbb.h PATH_SUFFIXES tbb) + find_library(TBB_LIB NAMES tbb) + if(TBB_INCLUDE_DIR AND TBB_LIB) + message(STATUS "Found tbb: include: ${TBB_INCLUDE_DIR}, lib: ${TBB_LIB}") + else() + message(FATAL_ERROR "Couldn't find system tbb") + endif() else() - set(TBB_SRC "${PROJECT_BINARY_DIR}/tbb-prefix/src/tbb") + set(TBB_SRC "${PROJECT_BINARY_DIR}/tbb-prefix/src/tbb") - message(STATUS "Using bundled tbb in '${TBB_SRC}'") + message(STATUS "Using bundled tbb in '${TBB_SRC}'") - set(TBB_INCLUDE_DIR "${TBB_SRC}/include/") - set(TBB_LIB "${TBB_SRC}/build/lib_release/libtbb.a") - ExternalProject_Add(tbb - URL "http://s3.amazonaws.com/download.draios.com/dependencies/tbb-2018_U5.tar.gz" - URL_MD5 "ff3ae09f8c23892fbc3008c39f78288f" - CONFIGURE_COMMAND "" - BUILD_COMMAND ${CMD_MAKE} tbb_build_dir=${TBB_SRC}/build tbb_build_prefix=lib extra_inc=big_iron.inc - BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${TBB_LIB} - INSTALL_COMMAND "") + set(TBB_INCLUDE_DIR "${TBB_SRC}/include/") + set(TBB_LIB "${TBB_SRC}/build/lib_release/libtbb.a") + ExternalProject_Add( + tbb + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/tbb-2018_U5.tar.gz" + URL_MD5 "ff3ae09f8c23892fbc3008c39f78288f" + CONFIGURE_COMMAND "" + BUILD_COMMAND ${CMD_MAKE} + tbb_build_dir=${TBB_SRC}/build + tbb_build_prefix=lib + extra_inc=big_iron.inc + BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS ${TBB_LIB} + INSTALL_COMMAND "") endif() # # civetweb # -option(USE_BUNDLED_CIVETWEB "Enable building of the bundled civetweb" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_CIVETWEB "Enable building of the bundled civetweb" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_CIVETWEB) - find_library(CIVETWEB_LIB NAMES civetweb) - if(CIVETWEB_LIB) - message(STATUS "Found civetweb: lib: ${CIVETWEB_LIB}") - else() - message(FATAL_ERROR "Couldn't find system civetweb") - endif() + find_library(CIVETWEB_LIB NAMES civetweb) + if(CIVETWEB_LIB) + message(STATUS "Found civetweb: lib: ${CIVETWEB_LIB}") + else() + message(FATAL_ERROR "Couldn't find system civetweb") + endif() else() - set(CIVETWEB_SRC "${PROJECT_BINARY_DIR}/civetweb-prefix/src/civetweb/") - set(CIVETWEB_LIB "${CIVETWEB_SRC}/install/lib/libcivetweb.a") - set(CIVETWEB_INCLUDE_DIR "${CIVETWEB_SRC}/install/include") - message(STATUS "Using bundled civetweb in '${CIVETWEB_SRC}'") - set(CIVETWEB_DEPENDENCIES "") - if(USE_BUNDLED_OPENSSL) - list(APPEND CIVETWEB_DEPENDENCIES "openssl") - endif() - ExternalProject_Add(civetweb - DEPENDS ${CIVETWEB_DEPENDENCIES} - URL "http://s3.amazonaws.com/download.draios.com/dependencies/civetweb-1.11.tar.gz" - URL_MD5 "b6d2175650a27924bccb747cbe084cd4" - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E make_directory ${CIVETWEB_SRC}/install/lib - COMMAND ${CMAKE_COMMAND} -E make_directory ${CIVETWEB_SRC}/install/include - BUILD_IN_SOURCE 1 - BUILD_COMMAND ${CMD_MAKE} COPT="-DNO_FILES" WITH_CPP=1 - INSTALL_COMMAND ${CMD_MAKE} install-lib install-headers PREFIX=${CIVETWEB_SRC}/install WITH_CPP=1) + set(CIVETWEB_SRC "${PROJECT_BINARY_DIR}/civetweb-prefix/src/civetweb/") + set(CIVETWEB_LIB "${CIVETWEB_SRC}/install/lib/libcivetweb.a") + set(CIVETWEB_INCLUDE_DIR "${CIVETWEB_SRC}/install/include") + message(STATUS "Using bundled civetweb in '${CIVETWEB_SRC}'") + set(CIVETWEB_DEPENDENCIES "") + if(USE_BUNDLED_OPENSSL) + list(APPEND CIVETWEB_DEPENDENCIES "openssl") + endif() + ExternalProject_Add( + civetweb + DEPENDS ${CIVETWEB_DEPENDENCIES} + URL + "http://s3.amazonaws.com/download.draios.com/dependencies/civetweb-1.11.tar.gz" + URL_MD5 "b6d2175650a27924bccb747cbe084cd4" + CONFIGURE_COMMAND ${CMAKE_COMMAND} + -E + make_directory + ${CIVETWEB_SRC}/install/lib + COMMAND ${CMAKE_COMMAND} + -E + make_directory + ${CIVETWEB_SRC}/install/include + BUILD_IN_SOURCE 1 + BUILD_COMMAND ${CMD_MAKE} COPT="-DNO_FILES" WITH_CPP=1 + INSTALL_COMMAND ${CMD_MAKE} + install-lib + install-headers + PREFIX=${CIVETWEB_SRC}/install + WITH_CPP=1) endif() -option(USE_BUNDLED_CARES "Enable building of the bundled c-ares" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_CARES "Enable building of the bundled c-ares" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_CARES) - find_path(CARES_INCLUDE NAMES cares/ares.h) - find_library(CARES_LIB NAMES libcares.a) - if(CARES_INCLUDE AND CARES_LIB) - message(STATUS "Found c-ares: include: ${CARES_INCLUDE}, lib: ${CARES_LIB}") - else() - message(FATAL_ERROR "Couldn't find system c-ares") - endif() + find_path(CARES_INCLUDE NAMES cares/ares.h) + find_library(CARES_LIB NAMES libcares.a) + if(CARES_INCLUDE AND CARES_LIB) + message(STATUS "Found c-ares: include: ${CARES_INCLUDE}, lib: ${CARES_LIB}") + else() + message(FATAL_ERROR "Couldn't find system c-ares") + endif() else() - set(CARES_SRC "${PROJECT_BINARY_DIR}/c-ares-prefix/src/c-ares") - message(STATUS "Using bundled c-ares in '${CARES_SRC}'") - set(CARES_INCLUDE "${CARES_SRC}/target/include") - set(CARES_LIB "${CARES_SRC}/target/lib/libcares.a") - ExternalProject_Add(c-ares - URL "https://download.sysdig.com/dependencies/c-ares-1.13.0.tar.gz" - URL_MD5 "d2e010b43537794d8bedfb562ae6bba2" - CONFIGURE_COMMAND ./configure --prefix=${CARES_SRC}/target - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${CARES_INCLUDE} ${CARES_LIB} - INSTALL_COMMAND ${CMD_MAKE} install) + set(CARES_SRC "${PROJECT_BINARY_DIR}/c-ares-prefix/src/c-ares") + message(STATUS "Using bundled c-ares in '${CARES_SRC}'") + set(CARES_INCLUDE "${CARES_SRC}/target/include") + set(CARES_LIB "${CARES_SRC}/target/lib/libcares.a") + ExternalProject_Add( + c-ares + URL "https://download.sysdig.com/dependencies/c-ares-1.13.0.tar.gz" + URL_MD5 "d2e010b43537794d8bedfb562ae6bba2" + CONFIGURE_COMMAND ./configure --prefix=${CARES_SRC}/target + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS ${CARES_INCLUDE} ${CARES_LIB} + INSTALL_COMMAND ${CMD_MAKE} install) endif() -option(USE_BUNDLED_PROTOBUF "Enable building of the bundled protobuf" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_PROTOBUF "Enable building of the bundled protobuf" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_PROTOBUF) - find_program(PROTOC NAMES protoc) - find_path(PROTOBUF_INCLUDE NAMES google/protobuf/message.h) - find_library(PROTOBUF_LIB NAMES libprotobuf.a) - if(PROTOC AND PROTOBUF_INCLUDE AND PROTOBUF_LIB) - message(STATUS "Found protobuf: compiler: ${PROTOC}, include: ${PROTOBUF_INCLUDE}, lib: ${PROTOBUF_LIB}") - else() - message(FATAL_ERROR "Couldn't find system protobuf") - endif() + find_program(PROTOC NAMES protoc) + find_path(PROTOBUF_INCLUDE NAMES google/protobuf/message.h) + find_library(PROTOBUF_LIB NAMES libprotobuf.a) + if(PROTOC AND PROTOBUF_INCLUDE AND PROTOBUF_LIB) + message( + STATUS + "Found protobuf: compiler: ${PROTOC}, include: ${PROTOBUF_INCLUDE}, lib: ${PROTOBUF_LIB}" + ) + else() + message(FATAL_ERROR "Couldn't find system protobuf") + endif() else() - set(PROTOBUF_SRC "${PROJECT_BINARY_DIR}/protobuf-prefix/src/protobuf") - message(STATUS "Using bundled protobuf in '${PROTOBUF_SRC}'") - set(PROTOC "${PROTOBUF_SRC}/target/bin/protoc") - set(PROTOBUF_INCLUDE "${PROTOBUF_SRC}/target/include") - set(PROTOBUF_LIB "${PROTOBUF_SRC}/target/lib/libprotobuf.a") - ExternalProject_Add(protobuf - DEPENDS openssl zlib - URL "https://github.com/google/protobuf/releases/download/v3.5.0/protobuf-cpp-3.5.0.tar.gz" - URL_MD5 "e4ba8284a407712168593e79e6555eb2" - # TODO what if using system zlib? - CONFIGURE_COMMAND /usr/bin/env CPPFLAGS=-I${ZLIB_INCLUDE} LDFLAGS=-L${ZLIB_SRC} ./configure --with-zlib --prefix=${PROTOBUF_SRC}/target - BUILD_COMMAND ${CMD_MAKE} - BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${PROTOC} ${PROTOBUF_INCLUDE} ${PROTOBUF_LIB} - # TODO s390x support - INSTALL_COMMAND make install) + set(PROTOBUF_SRC "${PROJECT_BINARY_DIR}/protobuf-prefix/src/protobuf") + message(STATUS "Using bundled protobuf in '${PROTOBUF_SRC}'") + set(PROTOC "${PROTOBUF_SRC}/target/bin/protoc") + set(PROTOBUF_INCLUDE "${PROTOBUF_SRC}/target/include") + set(PROTOBUF_LIB "${PROTOBUF_SRC}/target/lib/libprotobuf.a") + ExternalProject_Add( + protobuf + DEPENDS openssl zlib + URL + "https://github.com/google/protobuf/releases/download/v3.5.0/protobuf-cpp-3.5.0.tar.gz" + URL_MD5 "e4ba8284a407712168593e79e6555eb2" + # TODO what if using system zlib? + CONFIGURE_COMMAND /usr/bin/env + CPPFLAGS=-I${ZLIB_INCLUDE} + LDFLAGS=-L${ZLIB_SRC} + ./configure + --with-zlib + --prefix=${PROTOBUF_SRC}/target + BUILD_COMMAND ${CMD_MAKE} + BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS ${PROTOC} ${PROTOBUF_INCLUDE} ${PROTOBUF_LIB} + # TODO s390x support + INSTALL_COMMAND make install) endif() -option(USE_BUNDLED_GRPC "Enable building of the bundled grpc" ${USE_BUNDLED_DEPS}) +option(USE_BUNDLED_GRPC "Enable building of the bundled grpc" + ${USE_BUNDLED_DEPS}) if(NOT USE_BUNDLED_GRPC) - find_path(GRPC_INCLUDE grpc++/impl/codegen/rpc_method.h) - find_library(GRPC_LIB NAMES libgrpc_unsecure.a) - find_library(GRPCPP_LIB NAMES libgrpc++_unsecure.a) - if(GRPC_INCLUDE AND GRPC_LIB AND GRPCPP_LIB) - message(STATUS "Found grpc: include: ${GRPC_INCLUDE}, C lib: ${GRPC_LIB}, C++ lib: ${GRPC_PP_LIB}") - else() - message(FATAL_ERROR "Couldn't find system grpc") - endif() - find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) - if(NOT GRPC_CPP_PLUGIN) - message(FATAL_ERROR "System grpc_cpp_plugin not found") - endif() + find_path(GRPC_INCLUDE grpc++/impl/codegen/rpc_method.h) + find_library(GRPC_LIB NAMES libgrpc_unsecure.a) + find_library(GRPCPP_LIB NAMES libgrpc++_unsecure.a) + if(GRPC_INCLUDE AND GRPC_LIB AND GRPCPP_LIB) + message( + STATUS + "Found grpc: include: ${GRPC_INCLUDE}, C lib: ${GRPC_LIB}, C++ lib: ${GRPC_PP_LIB}" + ) + else() + message(FATAL_ERROR "Couldn't find system grpc") + endif() + find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) + if(NOT GRPC_CPP_PLUGIN) + message(FATAL_ERROR "System grpc_cpp_plugin not found") + endif() else() - set(GRPC_SRC "${PROJECT_BINARY_DIR}/grpc-prefix/src/grpc") - message(STATUS "Using bundled grpc in '${GRPC_SRC}'") - set(GRPC_INCLUDE "${GRPC_SRC}/include") - set(GRPC_LIB "${GRPC_SRC}/libs/opt/libgrpc_unsecure.a") - set(GRPCPP_LIB "${GRPC_SRC}/libs/opt/libgrpc++_unsecure.a") - set(GRPC_CPP_PLUGIN "${GRPC_SRC}/bins/opt/grpc_cpp_plugin") + set(GRPC_SRC "${PROJECT_BINARY_DIR}/grpc-prefix/src/grpc") + message(STATUS "Using bundled grpc in '${GRPC_SRC}'") + set(GRPC_INCLUDE "${GRPC_SRC}/include") + set(GRPC_LIB "${GRPC_SRC}/libs/opt/libgrpc_unsecure.a") + set(GRPCPP_LIB "${GRPC_SRC}/libs/opt/libgrpc++_unsecure.a") + set(GRPC_CPP_PLUGIN "${GRPC_SRC}/bins/opt/grpc_cpp_plugin") - get_filename_component(PROTOC_DIR ${PROTOC} DIRECTORY) + get_filename_component(PROTOC_DIR ${PROTOC} DIRECTORY) - ExternalProject_Add(grpc - DEPENDS protobuf zlib c-ares - URL "http://download.draios.com/dependencies/grpc-1.8.1.tar.gz" - URL_MD5 "2fc42c182a0ed1b48ad77397f76bb3bc" - CONFIGURE_COMMAND "" - # TODO what if using system openssl, protobuf or cares? - BUILD_COMMAND sh -c "CFLAGS=-Wno-implicit-fallthrough CXXFLAGS=\"-Wno-ignored-qualifiers -Wno-stringop-truncation\" HAS_SYSTEM_ZLIB=false LDFLAGS=-static PATH=${PROTOC_DIR}:$ENV{PATH} PKG_CONFIG_PATH=${OPENSSL_BUNDLE_DIR}:${PROTOBUF_SRC}:${CARES_SRC} make grpc_cpp_plugin static_cxx static_c" - BUILD_IN_SOURCE 1 - BUILD_BYPRODUCTS ${GRPC_LIB} ${GRPCPP_LIB} - # TODO s390x support - # TODO what if using system zlib - PATCH_COMMAND rm -rf third_party/zlib && ln -s ${ZLIB_SRC} third_party/zlib && wget https://download.sysdig.com/dependencies/grpc-1.1.4-Makefile.patch && patch < grpc-1.1.4-Makefile.patch - INSTALL_COMMAND "") + ExternalProject_Add( + grpc + DEPENDS protobuf zlib c-ares + URL "http://download.draios.com/dependencies/grpc-1.8.1.tar.gz" + URL_MD5 "2fc42c182a0ed1b48ad77397f76bb3bc" + CONFIGURE_COMMAND "" + # TODO what if using system openssl, protobuf or cares? + BUILD_COMMAND + sh -c + "CFLAGS=-Wno-implicit-fallthrough CXXFLAGS=\"-Wno-ignored-qualifiers -Wno-stringop-truncation\" HAS_SYSTEM_ZLIB=false LDFLAGS=-static PATH=${PROTOC_DIR}:$ENV{PATH} PKG_CONFIG_PATH=${OPENSSL_BUNDLE_DIR}:${PROTOBUF_SRC}:${CARES_SRC} make grpc_cpp_plugin static_cxx static_c" + BUILD_IN_SOURCE 1 + BUILD_BYPRODUCTS ${GRPC_LIB} ${GRPCPP_LIB} + # TODO s390x support + # TODO what if using system zlib + PATCH_COMMAND + rm + -rf + third_party/zlib + && + ln + -s + ${ZLIB_SRC} + third_party/zlib + && + wget + https://download.sysdig.com/dependencies/grpc-1.1.4-Makefile.patch + && + patch + < + grpc-1.1.4-Makefile.patch + INSTALL_COMMAND "") endif() - -install(FILES falco.yaml - DESTINATION "${FALCO_ETC_DIR}") +install(FILES falco.yaml DESTINATION "${FALCO_ETC_DIR}") add_subdirectory(test) add_subdirectory(rules) add_subdirectory(docker) -# Add path for custom CMake modules used to build dependencies from Sysdig (libscap, libsinsp) -list(APPEND CMAKE_MODULE_PATH - "${SYSDIG_DIR}/cmake/modules") +# Add path for custom CMake modules used to build dependencies from Sysdig +# (libscap, libsinsp) +list(APPEND CMAKE_MODULE_PATH "${SYSDIG_DIR}/cmake/modules") # Add path for custom CMake modules -list(APPEND CMAKE_MODULE_PATH - "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") if(CMAKE_SYSTEM_NAME MATCHES "Linux") - add_subdirectory("${SYSDIG_DIR}/driver" "${PROJECT_BINARY_DIR}/driver") - include(FindMakedev) + add_subdirectory("${SYSDIG_DIR}/driver" "${PROJECT_BINARY_DIR}/driver") + include(FindMakedev) endif() -add_subdirectory("${SYSDIG_DIR}/userspace/libscap" "${PROJECT_BINARY_DIR}/userspace/libscap") -add_subdirectory("${SYSDIG_DIR}/userspace/libsinsp" "${PROJECT_BINARY_DIR}/userspace/libsinsp") +add_subdirectory("${SYSDIG_DIR}/userspace/libscap" + "${PROJECT_BINARY_DIR}/userspace/libscap") +add_subdirectory("${SYSDIG_DIR}/userspace/libsinsp" + "${PROJECT_BINARY_DIR}/userspace/libsinsp") set(FALCO_SINSP_LIBRARY sinsp) set(FALCO_SHARE_DIR share/falco) @@ -630,13 +803,15 @@ add_subdirectory(userspace/engine) add_subdirectory(userspace/falco) add_subdirectory(tests) - set(CPACK_PACKAGE_NAME "${PACKAGE_NAME}") set(CPACK_PACKAGE_VENDOR "Sysdig Inc.") -set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "falco, a system-level activity monitoring tool") -set(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_SOURCE_DIR}/scripts/description.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "falco, a system-level activity monitoring tool") +set(CPACK_PACKAGE_DESCRIPTION_FILE + "${PROJECT_SOURCE_DIR}/scripts/description.txt") set(CPACK_PACKAGE_VERSION "${FALCO_VERSION}") -set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_PROCESSOR}") +set(CPACK_PACKAGE_FILE_NAME + "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CMAKE_SYSTEM_PROCESSOR}") set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_SOURCE_DIR}/CMakeCPackOptions.cmake") set(CPACK_STRIP_FILES "ON") set(CPACK_PACKAGE_RELOCATABLE "OFF") @@ -647,15 +822,30 @@ set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Sysdig ") set(CPACK_DEBIAN_PACKAGE_SECTION "utils") set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://www.sysdig.org") set(CPACK_DEBIAN_PACKAGE_DEPENDS "dkms (>= 2.1.0.0)") -set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA "${CMAKE_BINARY_DIR}/scripts/debian/postinst;${CMAKE_BINARY_DIR}/scripts/debian/prerm;${PROJECT_SOURCE_DIR}/scripts/debian/postrm;${PROJECT_SOURCE_DIR}/cpack/debian/conffiles") +set( + CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA + "${CMAKE_BINARY_DIR}/scripts/debian/postinst;${CMAKE_BINARY_DIR}/scripts/debian/prerm;${PROJECT_SOURCE_DIR}/scripts/debian/postrm;${PROJECT_SOURCE_DIR}/cpack/debian/conffiles" + ) set(CPACK_RPM_PACKAGE_LICENSE "Apache v2.0") set(CPACK_RPM_PACKAGE_URL "http://www.sysdig.org") set(CPACK_RPM_PACKAGE_REQUIRES "dkms, gcc, make, kernel-devel, perl") -set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE "${PROJECT_SOURCE_DIR}/scripts/rpm/postinstall") -set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE "${PROJECT_SOURCE_DIR}/scripts/rpm/preuninstall") -set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE "${PROJECT_SOURCE_DIR}/scripts/rpm/postuninstall") -set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION /usr/src /usr/share/man /usr/share/man/man8 /etc /usr /usr/bin /usr/share /etc/rc.d /etc/rc.d/init.d ) +set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE + "${PROJECT_SOURCE_DIR}/scripts/rpm/postinstall") +set(CPACK_RPM_PRE_UNINSTALL_SCRIPT_FILE + "${PROJECT_SOURCE_DIR}/scripts/rpm/preuninstall") +set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE + "${PROJECT_SOURCE_DIR}/scripts/rpm/postuninstall") +set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION + /usr/src + /usr/share/man + /usr/share/man/man8 + /etc + /usr + /usr/bin + /usr/share + /etc/rc.d + /etc/rc.d/init.d) set(CPACK_RPM_PACKAGE_RELOCATABLE "OFF") include(CPack) diff --git a/cmake/modules/Catch.cmake b/cmake/modules/Catch.cmake index 486e3233..2ee56e63 100644 --- a/cmake/modules/Catch.cmake +++ b/cmake/modules/Catch.cmake @@ -92,15 +92,13 @@ same as the Catch name; see also ``TEST_PREFIX`` and ``TEST_SUFFIX``. #]=======================================================================] -#------------------------------------------------------------------------------ +# ------------------------------------------------------------------------------ function(catch_discover_tests TARGET) - cmake_parse_arguments( - "" - "" - "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST" - "TEST_SPEC;EXTRA_ARGS;PROPERTIES" - ${ARGN} - ) + cmake_parse_arguments("" + "" + "TEST_PREFIX;TEST_SUFFIX;WORKING_DIRECTORY;TEST_LIST" + "TEST_SPEC;EXTRA_ARGS;PROPERTIES" + ${ARGN}) if(NOT _WORKING_DIRECTORY) set(_WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}") @@ -109,67 +107,78 @@ function(catch_discover_tests TARGET) set(_TEST_LIST ${TARGET}_TESTS) endif() - ## Generate a unique name based on the extra arguments + # Generate a unique name based on the extra arguments string(SHA1 args_hash "${_TEST_SPEC} ${_EXTRA_ARGS}") - string(SUBSTRING ${args_hash} 0 7 args_hash) + string(SUBSTRING ${args_hash} + 0 + 7 + args_hash) # Define rule to generate test list for aforementioned test executable - set(ctest_include_file "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_include-${args_hash}.cmake") - set(ctest_tests_file "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_tests-${args_hash}.cmake") + set(ctest_include_file + "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_include-${args_hash}.cmake") + set(ctest_tests_file + "${CMAKE_CURRENT_BINARY_DIR}/${TARGET}_tests-${args_hash}.cmake") get_property(crosscompiling_emulator - TARGET ${TARGET} - PROPERTY CROSSCOMPILING_EMULATOR - ) - add_custom_command( - TARGET ${TARGET} POST_BUILD - BYPRODUCTS "${ctest_tests_file}" - COMMAND "${CMAKE_COMMAND}" - -D "TEST_TARGET=${TARGET}" - -D "TEST_EXECUTABLE=$" - -D "TEST_EXECUTOR=${crosscompiling_emulator}" - -D "TEST_WORKING_DIR=${_WORKING_DIRECTORY}" - -D "TEST_SPEC=${_TEST_SPEC}" - -D "TEST_EXTRA_ARGS=${_EXTRA_ARGS}" - -D "TEST_PROPERTIES=${_PROPERTIES}" - -D "TEST_PREFIX=${_TEST_PREFIX}" - -D "TEST_SUFFIX=${_TEST_SUFFIX}" - -D "TEST_LIST=${_TEST_LIST}" - -D "CTEST_FILE=${ctest_tests_file}" - -P "${_CATCH_DISCOVER_TESTS_SCRIPT}" - VERBATIM - ) + TARGET ${TARGET} + PROPERTY CROSSCOMPILING_EMULATOR) + add_custom_command(TARGET + ${TARGET} + POST_BUILD + BYPRODUCTS + "${ctest_tests_file}" + COMMAND "${CMAKE_COMMAND}" + -D + "TEST_TARGET=${TARGET}" + -D + "TEST_EXECUTABLE=$" + -D + "TEST_EXECUTOR=${crosscompiling_emulator}" + -D + "TEST_WORKING_DIR=${_WORKING_DIRECTORY}" + -D + "TEST_SPEC=${_TEST_SPEC}" + -D + "TEST_EXTRA_ARGS=${_EXTRA_ARGS}" + -D + "TEST_PROPERTIES=${_PROPERTIES}" + -D + "TEST_PREFIX=${_TEST_PREFIX}" + -D + "TEST_SUFFIX=${_TEST_SUFFIX}" + -D + "TEST_LIST=${_TEST_LIST}" + -D + "CTEST_FILE=${ctest_tests_file}" + -P + "${_CATCH_DISCOVER_TESTS_SCRIPT}" + VERBATIM) - file(WRITE "${ctest_include_file}" + file( + WRITE "${ctest_include_file}" "if(EXISTS \"${ctest_tests_file}\")\n" " include(\"${ctest_tests_file}\")\n" "else()\n" " add_test(${TARGET}_NOT_BUILT-${args_hash} ${TARGET}_NOT_BUILT-${args_hash})\n" - "endif()\n" - ) + "endif()\n") - if(NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0") + if(NOT ${CMAKE_VERSION} VERSION_LESS "3.10.0") # Add discovered tests to directory TEST_INCLUDE_FILES set_property(DIRECTORY - APPEND PROPERTY TEST_INCLUDE_FILES "${ctest_include_file}" - ) + APPEND + PROPERTY TEST_INCLUDE_FILES "${ctest_include_file}") else() # Add discovered tests as directory TEST_INCLUDE_FILE if possible get_property(test_include_file_set DIRECTORY PROPERTY TEST_INCLUDE_FILE SET) - if (NOT ${test_include_file_set}) - set_property(DIRECTORY - PROPERTY TEST_INCLUDE_FILE "${ctest_include_file}" - ) + if(NOT ${test_include_file_set}) + set_property(DIRECTORY PROPERTY TEST_INCLUDE_FILE "${ctest_include_file}") else() - message(FATAL_ERROR - "Cannot set more than one TEST_INCLUDE_FILE" - ) + message(FATAL_ERROR "Cannot set more than one TEST_INCLUDE_FILE") endif() endif() endfunction() -############################################################################### +# ############################################################################## -set(_CATCH_DISCOVER_TESTS_SCRIPT - ${CMAKE_CURRENT_LIST_DIR}/CatchAddTests.cmake -) +set(_CATCH_DISCOVER_TESTS_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/CatchAddTests.cmake) diff --git a/cmake/modules/CatchAddTests.cmake b/cmake/modules/CatchAddTests.cmake index 2220ce3a..05f2d1bd 100644 --- a/cmake/modules/CatchAddTests.cmake +++ b/cmake/modules/CatchAddTests.cmake @@ -24,49 +24,50 @@ endfunction() # Run test executable to get list of available tests if(NOT EXISTS "${TEST_EXECUTABLE}") - message(FATAL_ERROR - "Specified test executable '${TEST_EXECUTABLE}' does not exist" - ) + message( + FATAL_ERROR "Specified test executable '${TEST_EXECUTABLE}' does not exist") endif() -execute_process( - COMMAND ${TEST_EXECUTOR} "${TEST_EXECUTABLE}" ${spec} --list-test-names-only - OUTPUT_VARIABLE output - RESULT_VARIABLE result -) -# Catch --list-test-names-only reports the number of tests, so 0 is... surprising +execute_process(COMMAND ${TEST_EXECUTOR} + "${TEST_EXECUTABLE}" + ${spec} + --list-test-names-only + OUTPUT_VARIABLE output + RESULT_VARIABLE result) +# Catch --list-test-names-only reports the number of tests, so 0 is... +# surprising if(${result} EQUAL 0) - message(WARNING - "Test executable '${TEST_EXECUTABLE}' contains no tests!\n" - ) + message(WARNING "Test executable '${TEST_EXECUTABLE}' contains no tests!\n") elseif(${result} LESS 0) - message(FATAL_ERROR - "Error running test executable '${TEST_EXECUTABLE}':\n" - " Result: ${result}\n" - " Output: ${output}\n" - ) + message(FATAL_ERROR "Error running test executable '${TEST_EXECUTABLE}':\n" + " Result: ${result}\n" " Output: ${output}\n") endif() -string(REPLACE "\n" ";" output "${output}") +string(REPLACE "\n" + ";" + output + "${output}") # Parse output foreach(line ${output}) set(test ${line}) # use escape commas to handle properly test cases with commans inside the name - string(REPLACE "," "\\," test_name ${test}) + string(REPLACE "," + "\\," + test_name + ${test}) # ...and add to script add_command(add_test - "${prefix}${test}${suffix}" - ${TEST_EXECUTOR} - "${TEST_EXECUTABLE}" - "${test_name}" - ${extra_args} - ) + "${prefix}${test}${suffix}" + ${TEST_EXECUTOR} + "${TEST_EXECUTABLE}" + "${test_name}" + ${extra_args}) add_command(set_tests_properties - "${prefix}${test}${suffix}" - PROPERTIES - WORKING_DIRECTORY "${TEST_WORKING_DIR}" - ${properties} - ) + "${prefix}${test}${suffix}" + PROPERTIES + WORKING_DIRECTORY + "${TEST_WORKING_DIR}" + ${properties}) list(APPEND tests "${prefix}${test}${suffix}") endforeach() diff --git a/cmake/modules/DownloadCatch.cmake b/cmake/modules/DownloadCatch.cmake new file mode 100644 index 00000000..f1583b74 --- /dev/null +++ b/cmake/modules/DownloadCatch.cmake @@ -0,0 +1,39 @@ +# +# Copyright (C) 2016-2019 Draios Inc dba Sysdig. +# +# This file is part of falco . +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# +include(ExternalProject) + +set(CATCH2_INCLUDE ${CMAKE_BINARY_DIR}/catch2-prefix/include) + +set(CATCH_EXTERNAL_URL + URL + https://github.com/catchorg/catch2/archive/v2.9.1.tar.gz + URL_HASH + MD5=4980778888fed635bf191d8a86f9f89c) + +ExternalProject_Add( + catch2 + PREFIX ${CMAKE_BINARY_DIR}/catch2-prefix + ${CATCH_EXTERNAL_URL} + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND + ${CMAKE_COMMAND} + -E + copy + ${CMAKE_BINARY_DIR}/catch2-prefix/src/catch2/single_include/catch2/catch.hpp + ${CATCH2_INCLUDE}/catch.hpp) diff --git a/cmake/modules/FindCatch.cmake b/cmake/modules/FindCatch.cmake deleted file mode 100644 index 88f18149..00000000 --- a/cmake/modules/FindCatch.cmake +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (C) 2016-2019 Draios Inc dba Sysdig. -# -# This file is part of falco . -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -include(ExternalProject) - -set(CATCH_EXTERNAL_URL - URL https://github.com/catchorg/Catch2/archive/v2.9.1.tar.gz - URL_HASH MD5=4980778888fed635bf191d8a86f9f89c) -ExternalProject_Add(catch2 - PREFIX ${CMAKE_BINARY_DIR}/catch2-prefix - ${CATCH_EXTERNAL_URL} - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/catch2-prefix/src/catch2/single_include/catch2/catch.hpp - ${CMAKE_BINARY_DIR}/catch2-prefix/include/catch.hpp -) -add_library(catch INTERFACE) -add_dependencies(catch catch2) -target_include_directories(catch INTERFACE ${CMAKE_BINARY_DIR}/catch2-prefix/include) - diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 2cd30967..5919f511 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -3,52 +3,46 @@ # # This file is part of falco . # -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. # -set(FALCO_TESTS_SOURCES - test_base.cpp - engine/test_token_bucket.cpp) +set(FALCO_TESTS_SOURCES test_base.cpp engine/test_token_bucket.cpp) -set(FALCO_TESTED_LIBRARIES - falco_engine) +set(FALCO_TESTED_LIBRARIES falco_engine) option(FALCO_BUILD_TESTS "Determines whether to build tests." ON) if(FALCO_BUILD_TESTS) - enable_testing() - if(NOT TARGET catch) - include(FindCatch) - endif() + enable_testing() + if(NOT TARGET catch) + include(DownloadCatch) + endif() - add_executable(falco_test ${FALCO_TESTS_SOURCES}) + if(NOT TARGET fakeit) + include(DownloadFakeIt) + endif() - target_link_libraries(falco_test PUBLIC ${FALCO_TESTED_LIBRARIES} catch) - target_include_directories(falco_test PUBLIC - "${SYSDIG_DIR}/userspace/libsinsp/third-party/jsoncpp" - "${SYSDIG_DIR}/userspace/libscap" - "${SYSDIG_DIR}/userspace/libsinsp" - "${LUAJIT_INCLUDE}" - "${NJSON_INCLUDE}" - "${CURL_INCLUDE_DIR}" - "${TBB_INCLUDE_DIR}" - "${LUAJIT_INCLUDE}" - "${NJSON_INCLUDE}" - "${PROJECT_SOURCE_DIR}/userspace/engine" - ) + add_executable(falco_test ${FALCO_TESTS_SOURCES}) - include(CTest) - include(Catch) - catch_discover_tests(falco_test) + target_link_libraries(falco_test PUBLIC ${FALCO_TESTED_LIBRARIES}) + target_include_directories( + falco_test + PUBLIC "${CATCH2_INCLUDE}" + "${FAKEIT_INCLUDE}" + "${PROJECT_SOURCE_DIR}/userspace/engine") - add_custom_target(tests COMMAND ${CMAKE_CTEST_COMMAND} DEPENDS falco_test) + include(CTest) + include(Catch) + catch_discover_tests(falco_test) + + add_custom_target(tests COMMAND ${CMAKE_CTEST_COMMAND} DEPENDS falco_test) endif()