用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
5.2 KiB

3 months ago
# Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# We require rapidjson version 1.1.0 or higher.
# -DWITH_RAPIDJSON=bundled is the default
IF(CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
# Oracle Developer Studio 12.x isn't detected as c++11 compliant by rapidjson
# automatically.
ADD_DEFINITIONS(-DRAPIDJSON_HAS_CXX11_RANGE_FOR=1)
ADD_DEFINITIONS(-DRAPIDJSON_HAS_CXX11_NOEXCEPT=1)
ADD_DEFINITIONS(-DRAPIDJSON_HAS_CXX11_RVALUE_REFS=1)
ENDIF()
MACRO(WRONG_RAPIDJSON_VERSION)
MESSAGE(FATAL_ERROR "rapidjson version 1.1.0 or higher is required.")
ENDMACRO()
SET(rapidjson_regex_check_code "
#include <rapidjson/document.h>
#include <rapidjson/schema.h>
int main() {
using namespace rapidjson;
Document schema_doc;
schema_doc.Parse(\"{\\\\\"type\\\\\":\\\\\"string\\\\\",\\\\\"pattern\\\\\":\\\\\"a\\\\\"}\");
SchemaDocument schema(schema_doc);
SchemaValidator validator(schema);
Document doc;
doc.Parse(\"\\\\\"b\\\\\"\");
return doc.Accept(validator) ? 1 : 0;
}"
)
MACRO (CHECK_RAPIDJSON_VERSION)
FILE(STRINGS "${RAPIDJSON_INCLUDE_DIR}/rapidjson/rapidjson.h"
RAPIDJSON_MAJOR_VERSION_NUMBER
REGEX "^#define RAPIDJSON_MAJOR_VERSION ([0-9]+.*)"
)
FILE(STRINGS "${RAPIDJSON_INCLUDE_DIR}/rapidjson/rapidjson.h"
RAPIDJSON_MINOR_VERSION_NUMBER
REGEX "^#define RAPIDJSON_MINOR_VERSION ([0-9]+.*)"
)
STRING(REGEX MATCH "([0-9])"
RAPIDJSON_MAJOR_VERSION_NUMBER "${RAPIDJSON_MAJOR_VERSION_NUMBER}")
STRING(REGEX MATCH "([0-9])"
RAPIDJSON_MINOR_VERSION_NUMBER "${RAPIDJSON_MINOR_VERSION_NUMBER}")
MESSAGE(STATUS "RAPIDJSON_MAJOR_VERSION is ${RAPIDJSON_MAJOR_VERSION_NUMBER}")
MESSAGE(STATUS "RAPIDJSON_MINOR_VERSION is ${RAPIDJSON_MINOR_VERSION_NUMBER}")
SET(RAPIDJSON_FULL_VERSION
"${RAPIDJSON_MAJOR_VERSION_NUMBER}.${RAPIDJSON_MINOR_VERSION_NUMBER}")
IF (RAPIDJSON_FULL_VERSION VERSION_LESS "1.1")
WRONG_RAPIDJSON_VERSION()
ENDIF()
ENDMACRO()
MACRO (FIND_SYSTEM_RAPIDJSON)
FIND_PATH(PATH_TO_RAPIDJSON NAMES rapidjson/rapidjson.h)
IF (PATH_TO_RAPIDJSON)
SET(SYSTEM_RAPIDJSON_FOUND 1)
SET(RAPIDJSON_INCLUDE_DIR ${PATH_TO_RAPIDJSON})
ENDIF()
ENDMACRO()
MACRO (MYSQL_CHECK_RAPIDJSON)
IF (NOT WITH_RAPIDJSON OR
NOT WITH_RAPIDJSON STREQUAL "system")
SET(WITH_RAPIDJSON "bundled")
ENDIF()
IF (WITH_RAPIDJSON STREQUAL "bundled")
SET(RAPIDJSON_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/extra/rapidjson/include)
ELSEIF(WITH_RAPIDJSON STREQUAL "system")
FIND_SYSTEM_RAPIDJSON()
IF (NOT SYSTEM_RAPIDJSON_FOUND)
MESSAGE(FATAL_ERROR "Cannot find system rapidjson libraries. You need to "
"install the required libraries:\n"
" Debian/Ubuntu: apt install rapidjson-dev\n"
" RedHat/Fedora/Oracle Linux: yum install rapidjson-devel\n"
" SuSE: zypper install rapidjson\n"
"You can also use the bundled version by specifyng "
"-DWITH_RAPIDJSON=bundled.")
ENDIF()
# Check if the system version includes the necessary fixes for std::regex.
CMAKE_PUSH_CHECK_STATE()
SET(CMAKE_REQUIRED_INCLUDES ${RAPIDJSON_INCLUDE_DIR})
SET(CMAKE_REQUIRED_DEFINITIONS "-DRAPIDJSON_SCHEMA_USE_INTERNALREGEX=0 "
"-DRAPIDJSON_SCHEMA_USE_STDREGEX=1")
CHECK_CXX_SOURCE_RUNS("${rapidjson_regex_check_code}"
HAVE_RAPIDJSON_WITH_STD_REGEX)
CMAKE_POP_CHECK_STATE()
IF (NOT HAVE_RAPIDJSON_WITH_STD_REGEX)
MESSAGE(FATAL_ERROR "System rapidjson lacks some fixes required for "
"support of regular expressions. See extra/RAPIDJSON-README "
"for details.")
ENDIF()
ELSE()
MESSAGE(FATAL_ERROR "WITH_RAPIDJSON must be bundled or system")
ENDIF()
MESSAGE(STATUS "RAPIDJSON_INCLUDE_DIR ${RAPIDJSON_INCLUDE_DIR}")
CHECK_RAPIDJSON_VERSION()
IF(WITH_RAPIDJSON STREQUAL "bundled")
INCLUDE_DIRECTORIES(BEFORE SYSTEM ${RAPIDJSON_INCLUDE_DIR})
ELSE()
INCLUDE_DIRECTORIES(SYSTEM ${RAPIDJSON_INCLUDE_DIR})
ENDIF()
ENDMACRO()
ADD_DEFINITIONS(-DRAPIDJSON_NO_SIZETYPEDEFINE)
ADD_DEFINITIONS(-DRAPIDJSON_SCHEMA_USE_INTERNALREGEX=0)
ADD_DEFINITIONS(-DRAPIDJSON_SCHEMA_USE_STDREGEX=1)