This is an automated email from the ASF dual-hosted git repository.

asekretenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit b2e12fc423a5c1fcb786e2fce01193ef7207006e
Author: Andrei Sekretenko <asekrete...@apache.org>
AuthorDate: Wed Jul 15 20:01:25 2020 +0200

    Added RE2 to the CMake build.
    
    This is a prerequisite for implementing regex-based offer constraints.
    
    Review: https://reviews.apache.org/r/72782
---
 3rdparty/CMakeLists.txt        |  82 +++++++++++++++++++++++++++++++++++++++++
 3rdparty/cmake/Versions.cmake  |   2 +
 3rdparty/re2-2020-07-06.tar.gz | Bin 0 -> 404055 bytes
 LICENSE                        |  32 ++++++++++++++++
 src/CMakeLists.txt             |   1 +
 5 files changed, 117 insertions(+)

diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt
index af9a071..59c931c 100644
--- a/3rdparty/CMakeLists.txt
+++ b/3rdparty/CMakeLists.txt
@@ -42,6 +42,7 @@ set(NVML_URL            
${FETCH_URL}/nvml-${NVML_VERSION}.tar.gz)
 set(PICOJSON_URL        ${FETCH_URL}/picojson-${PICOJSON_VERSION}.tar.gz)
 set(PROTOBUF_URL        ${FETCH_URL}/protobuf-${PROTOBUF_VERSION}.tar.gz)
 set(RAPIDJSON_URL       ${FETCH_URL}/rapidjson-${RAPIDJSON_VERSION}.tar.gz)
+set(RE2_URL             ${FETCH_URL}/re2-${RE2_VERSION}.tar.gz)
 set(XZ_URL              ${FETCH_URL}/xz-${XZ_VERSION}-modified.tar.gz)
 set(ZOOKEEPER_URL       ${FETCH_URL}/zookeeper-${ZOOKEEPER_VERSION}.tar.gz)
 
@@ -477,6 +478,87 @@ if (ENABLE_INSTALL_MODULE_DEPENDENCIES)
     DESTINATION ${MESOS_INSTALL_HEADERS})
 endif ()
 
+# re2: non-backtracking regular expression library by Google
+# https://github.com/google/re2
+################################
+EXTERNAL(re2 ${RE2_VERSION} ${CMAKE_CURRENT_BINARY_DIR})
+add_library(re2 ${LIBRARY_LINKAGE} IMPORTED GLOBAL)
+add_dependencies(re2 ${RE2_TARGET})
+
+# NOTE: Mesos build uses re2 installed into a prefix (similarly to glog).
+set(RE2_INSTALL_DIR ${RE2_ROOT}-install)
+
+set(
+  RE2_CMAKE_ARGS
+  ${CMAKE_CXX_FORWARD_ARGS}
+  -DBUILD_TESTING=OFF
+  -DCMAKE_INSTALL_BINDIR=${RE2_INSTALL_DIR}/bin
+  -DCMAKE_INSTALL_INCLUDEDIR=${RE2_INSTALL_DIR}/include
+  -DCMAKE_INSTALL_LIBDIR=${RE2_INSTALL_DIR}/lib
+)
+
+if (WIN32)
+  if (BUILD_SHARED_LIBS)
+    set(RE2_IMPORTED_LOCATION_DIR ${RE2_INSTALL_DIR}/bin)
+  else()
+    set(RE2_IMPORTED_LOCATION_DIR ${RE2_INSTALL_DIR}/lib)
+  endif()
+
+  if (CMAKE_GENERATOR MATCHES "Visual Studio")
+    # TODO(asekretenko): Make sure that these locations are correct on
+    # MSVC Windows both in debug and release modes; adjust if necessary.
+    set_target_properties(
+      re2 PROPERTIES
+      IMPORTED_LOCATION_DEBUG ${RE2_IMPORTED_LOCATION_DIR}/re2${LIBRARY_SUFFIX}
+      IMPORTED_LOCATION_RELEASE 
${RE2_IMPORTED_LOCATION_DIR}/re2${LIBRARY_SUFFIX}
+      IMPORTED_IMPLIB_DEBUG 
${RE2_INSTALL_DIR}/lib/re2${CMAKE_IMPORT_LIBRARY_SUFFIX}
+      IMPORTED_IMPLIB_RELEASE 
${RE2_INSTALL_DIR}/lib/re2${CMAKE_IMPORT_LIBRARY_SUFFIX}
+    )
+  else ()
+    # TODO(asekretenko): Make sure that these locations are correct on
+    # non-MSVC Windows; adjust if necessary.
+    set_target_properties(
+      re2 PROPERTIES
+      IMPORTED_LOCATION ${RE2_IMPORTED_LOCATION_DIR}/libre2${LIBRARY_SUFFIX}
+      IMPORTED_IMPLIB 
${RE2_INSTALL_DIR}/lib/libre2${CMAKE_IMPORT_LIBRARY_SUFFIX}
+    )
+  endif()
+else()
+  set_target_properties(
+    re2 PROPERTIES
+    IMPORTED_LOCATION ${RE2_INSTALL_DIR}/lib/libre2${LIBRARY_SUFFIX}
+  )
+endif ()
+
+set_target_properties(
+  re2 PROPERTIES
+  INTERFACE_INCLUDE_DIRECTORIES ${RE2_INSTALL_DIR}/include
+)
+
+MAKE_INCLUDE_DIR(re2)
+GET_BYPRODUCTS(re2)
+
+ExternalProject_Add(
+  ${RE2_TARGET}
+  PREFIX            ${RE2_CMAKE_ROOT}
+  BUILD_BYPRODUCTS  ${RE2_BYPRODUCTS}
+  CMAKE_ARGS        ${RE2_CMAKE_ARGS}
+  INSTALL_DIR       ${RE2_INSTALL_DIR}
+  URL               ${RE2_URL}
+  URL_HASH          ${RE2_HASH})
+
+if (WIN32 AND BUILD_SHARED_LIBS)
+  # TODO(asekretenko): Make sure that this location is correct on
+  # Windows; adjust if necessary.
+  install(
+    DIRECTORY ${RE2_INSTALL_DIR}/bin/
+    DESTINATION ${MESOS_INSTALL_RUNTIME})
+endif()
+
+install(
+  DIRECTORY ${RE2_INSTALL_DIR}/lib/
+  DESTINATION ${MESOS_INSTALL_LIBRARIES})
+
 # PicoJSON: JSON parser / serializer.
 # https://github.com/kazuho/picojson
 #####################################
diff --git a/3rdparty/cmake/Versions.cmake b/3rdparty/cmake/Versions.cmake
index 9376616..eafe255 100644
--- a/3rdparty/cmake/Versions.cmake
+++ b/3rdparty/cmake/Versions.cmake
@@ -49,6 +49,8 @@ set(ZOOKEEPER_VERSION       "3.4.8")
 set(ZOOKEEPER_HASH          
"SHA256=F10A0B51F45C4F64C1FE69EF713ABF9EB9571BC7385A82DA892E83BB6C965E90")
 set(GLOG_VERSION      "0.4.0")
 set(GLOG_HASH         
"SHA256=F28359AEBA12F30D73D9E4711EF356DC842886968112162BC73002645139C39C")
+set(RE2_VERSION             "2020-07-06")
+set(RE2_HASH                
"SHA256=2E9489A31AE007C81E90E8EC8A15D62D58A9C18D4FD1603F6441EF248556B41F")
 
 # Platform-dependent versions.
 if (WIN32)
diff --git a/3rdparty/re2-2020-07-06.tar.gz b/3rdparty/re2-2020-07-06.tar.gz
new file mode 100644
index 0000000..a7d6c9f
Binary files /dev/null and b/3rdparty/re2-2020-07-06.tar.gz differ
diff --git a/LICENSE b/LICENSE
index 2c5919d..6ef484e 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1295,3 +1295,35 @@ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 
PARTIES OR A
 FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
 SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
 DAMAGES.
+
+
+======================================================================
+For re2-2020-07-06 (3rdparty/re2-2020-07-06.tar.gz):
+======================================================================
+// Copyright (c) 2009 The RE2 Authors. 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 name of Google Inc. nor the names of its
+// 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
+// OWNER 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.
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 668a506..f5105c7 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -634,6 +634,7 @@ target_link_libraries(
 
 if (NOT WIN32)
   target_link_libraries(mesos PUBLIC leveldb)
+  target_link_libraries(mesos PUBLIC re2)
 endif ()
 
 if (ENABLE_SECCOMP_ISOLATOR)

Reply via email to