Bläddra i källkod

Improved configure.ac parsing

Konstantin Podsvirov 10 år sedan
förälder
incheckning
db01460042
1 ändrade filer med 27 tillägg och 15 borttagningar
  1. 27 15
      cmake/CMakeLists.txt

+ 27 - 15
cmake/CMakeLists.txt

@@ -5,6 +5,7 @@ cmake_minimum_required(VERSION 2.8)
 project(protobuf C CXX)
 
 # Options
+option(protobuf_VERBOSE "Enable for verbose output" OFF)
 option(BUILD_TESTING "Build tests" ON)
 option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
 if (MSVC)
@@ -14,29 +15,40 @@ endif (MSVC)
 # Path to main configure script
 set(protobuf_CONFIGURE_SCRIPT "../configure.ac")
 
-# Parse version from configure script
-file(STRINGS "${protobuf_CONFIGURE_SCRIPT}" protobuf_VERSION_LINE
-  LIMIT_COUNT 1
-  REGEX "^AC_INIT")
-# Replace special characters
-string(REPLACE "(" "_" protobuf_VERSION_LINE ${protobuf_VERSION_LINE})
-string(REPLACE ")" "_" protobuf_VERSION_LINE ${protobuf_VERSION_LINE})
-string(REPLACE "[" "_" protobuf_VERSION_LINE ${protobuf_VERSION_LINE})
-string(REPLACE "]" "_" protobuf_VERSION_LINE ${protobuf_VERSION_LINE})
-# Parse version string
-string(REGEX REPLACE "^AC_INIT__Protocol Buffers_,_([^_]+).*$" "\\1"
-    protobuf_VERSION_STRING "${protobuf_VERSION_LINE}")
+# Parse configure script
+set(protobuf_AC_INIT_REGEX
+  "^AC_INIT\\(\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\],\\[([^]]+)\\]\\)$")
+file(STRINGS "${protobuf_CONFIGURE_SCRIPT}" protobuf_AC_INIT_LINE
+  LIMIT_COUNT 1 REGEX "^AC_INIT")
+# Description
+string(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\1"
+    protobuf_DESCRIPTION    "${protobuf_AC_INIT_LINE}")
+# Version
+string(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\2"
+    protobuf_VERSION_STRING "${protobuf_AC_INIT_LINE}")
+# Contact
+string(REGEX REPLACE        "${protobuf_AC_INIT_REGEX}" "\\3"
+    protobuf_CONTACT        "${protobuf_AC_INIT_LINE}")
 # Parse version tweaks
-string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\1"
+set(protobuf_VERSION_REGEX "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*$")
+string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\1"
   protobuf_VERSION_MAJOR "${protobuf_VERSION_STRING}")
-string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\2"
+string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\2"
   protobuf_VERSION_MINOR "${protobuf_VERSION_STRING}")
-string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*$" "\\3"
+string(REGEX REPLACE     "${protobuf_VERSION_REGEX}" "\\3"
   protobuf_VERSION_PATCH "${protobuf_VERSION_STRING}")
 # Package version
 set(protobuf_VERSION
   "${protobuf_VERSION_MAJOR}.${protobuf_VERSION_MINOR}.${protobuf_VERSION_PATCH}")
 
+if(protobuf_VERBOSE)
+  message(STATUS "Configuration script parsing status [")
+  message(STATUS "  Description : ${protobuf_DESCRIPTION}")
+  message(STATUS "  Version     : ${protobuf_VERSION} (${protobuf_VERSION_STRING})")
+  message(STATUS "  Contact     : ${protobuf_CONTACT}")
+  message(STATUS "]")
+endif()
+
 add_definitions(-DGOOGLE_PROTOBUF_CMAKE_BUILD)
 
 find_package(Threads REQUIRED)