用于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.

137 lines
4.9 KiB

5 months ago
# Copyright (c) 2015, 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
#
# Usage:
#
# cmake -DWITH_PROTOBUF="bundled"|"system"
#
# Default is "bundled"
# Other values will be ignored, and we fall back to "bundled"
#
MACRO(ECHO_PROTOBUF_VARIABLES)
MESSAGE(STATUS "PROTOBUF_INCLUDE_DIR ${PROTOBUF_INCLUDE_DIR}")
MESSAGE(STATUS "PROTOBUF_LIBRARY ${PROTOBUF_LIBRARY}")
MESSAGE(STATUS "PROTOBUF_LITE_LIBRARY ${PROTOBUF_LITE_LIBRARY}")
MESSAGE(STATUS "PROTOBUF_PROTOC_EXECUTABLE ${PROTOBUF_PROTOC_EXECUTABLE}")
ENDMACRO()
MACRO(COULD_NOT_FIND_PROTOBUF)
ECHO_PROTOBUF_VARIABLES()
MESSAGE(STATUS "Could not find (the correct version of) protobuf.")
MESSAGE(STATUS "MySQL currently requires at least protobuf version 3.0")
MESSAGE(FATAL_ERROR
"You can build with the bundled sources"
)
ENDMACRO()
SET(BUNDLED_PROTO_SRCDIR ${CMAKE_SOURCE_DIR}/extra/protobuf/protobuf-3.6.1/src)
MACRO(MYSQL_USE_BUNDLED_PROTOBUF)
SET(WITH_PROTOBUF "bundled" CACHE STRING
"Bundled protoc and protobuf library")
# Set the same variables as FindProtobuf.cmake (First reset all)
FOREACH(protovar
INCLUDE_DIR
LIBRARY_DEBUG
LIBRARY_RELEASE
LITE_LIBRARY_DEBUG
LITE_LIBRARY_RELEASE
PROTOC_EXECUTABLE
PROTOC_LIBRARY_DEBUG
PROTOC_LIBRARY_RELEASE)
UNSET(Protobuf_${protovar})
UNSET(Protobuf_${protovar} CACHE)
ENDFOREACH()
UNSET(FIND_PACKAGE_MESSAGE_DETAILS_Protobuf)
UNSET(FIND_PACKAGE_MESSAGE_DETAILS_Protobuf CACHE)
SET(PROTOBUF_FOUND 1 CACHE INTERNAL "")
SET(PROTOBUF_INCLUDE_DIR ${BUNDLED_PROTO_SRCDIR} CACHE INTERNAL "")
SET(PROTOBUF_INCLUDE_DIRS ${BUNDLED_PROTO_SRCDIR} CACHE INTERNAL "")
SET(PROTOBUF_LIBRARY libprotobuf CACHE INTERNAL "")
SET(PROTOBUF_LIBRARY_DEBUG libprotobuf CACHE INTERNAL "")
SET(PROTOBUF_LIBRARIES protobuf CACHE INTERNAL "")
SET(PROTOBUF_PROTOC_EXECUTABLE protoc CACHE INTERNAL "")
SET(PROTOBUF_PROTOC_LIBRARY libprotoc CACHE INTERNAL "")
SET(PROTOBUF_PROTOC_LIBRARY_DEBUG libprotoc CACHE INTERNAL "")
SET(PROTOBUF_LITE_LIBRARY libprotobuf-lite CACHE INTERNAL "")
SET(PROTOBUF_LITE_LIBRARY_DEBUG libprotobuf-lite CACHE INTERNAL "")
ENDMACRO()
MACRO(MYSQL_CHECK_PROTOBUF)
IF (NOT WITH_PROTOBUF OR
NOT WITH_PROTOBUF STREQUAL "system")
SET(WITH_PROTOBUF "bundled")
ENDIF()
MESSAGE(STATUS "WITH_PROTOBUF=${WITH_PROTOBUF}")
IF(WITH_PROTOBUF STREQUAL "bundled")
MYSQL_USE_BUNDLED_PROTOBUF()
ELSE()
FIND_PACKAGE(Protobuf)
ENDIF()
IF(NOT PROTOBUF_FOUND)
MESSAGE(WARNING "Protobuf libraries/headers could not be found")
ENDIF()
IF(NOT PROTOBUF_PROTOC_EXECUTABLE)
MESSAGE(WARNING "The protoc executable could not be found")
ENDIF()
IF(NOT PROTOBUF_PROTOC_LIBRARY)
MESSAGE(WARNING "The protoc library could not be found")
ENDIF()
IF(NOT PROTOBUF_FOUND OR
NOT PROTOBUF_PROTOC_EXECUTABLE OR
NOT PROTOBUF_PROTOC_LIBRARY)
MESSAGE(FATAL_ERROR "Use bundled protobuf, or install missing packages")
ENDIF()
# Verify protobuf version number. Version information looks like:
# // The current version, represented as a single integer to make comparison
# // easier: major * 10^6 + minor * 10^3 + micro
# #define GOOGLE_PROTOBUF_VERSION 2006000
FILE(STRINGS "${PROTOBUF_INCLUDE_DIR}/google/protobuf/stubs/common.h"
PROTOBUF_VERSION_NUMBER
REGEX "^#define[\t ]+GOOGLE_PROTOBUF_VERSION[\t ][0-9]+.*"
)
STRING(REGEX REPLACE
"^.*GOOGLE_PROTOBUF_VERSION[\t ]([0-9])[0-9][0-9]([0-9])[0-9][0-9].*$"
"\\1"
PROTOBUF_MAJOR_VERSION "${PROTOBUF_VERSION_NUMBER}")
STRING(REGEX REPLACE
"^.*GOOGLE_PROTOBUF_VERSION[\t ]([0-9])[0-9][0-9]([0-9])[0-9][0-9].*$"
"\\2"
PROTOBUF_MINOR_VERSION "${PROTOBUF_VERSION_NUMBER}")
MESSAGE(STATUS
"PROTOBUF_VERSION_NUMBER is ${PROTOBUF_VERSION_NUMBER}")
IF("${PROTOBUF_MAJOR_VERSION}.${PROTOBUF_MINOR_VERSION}" VERSION_LESS "3.0")
COULD_NOT_FIND_PROTOBUF()
ENDIF()
ECHO_PROTOBUF_VARIABLES()
ENDMACRO()