浏览代码

cmake: add version module

Dimitri Stolnikov 12 年之前
父节点
当前提交
ce341fe53b
共有 3 个文件被更改,包括 74 次插入1 次删除
  1. 12 0
      CMakeLists.txt
  2. 60 0
      cmake/Modules/Version.cmake
  3. 2 1
      src/CMakeLists.txt

+ 12 - 0
CMakeLists.txt

@@ -37,6 +37,12 @@ if(NOT LIB_INSTALL_DIR)
    set(LIB_INSTALL_DIR lib)
 endif()
 
+# Set the version information here
+set(VERSION_INFO_MAJOR_VERSION 0) # increment major on api compatibility changes
+set(VERSION_INFO_MINOR_VERSION 0) # increment minor on feature-level changes
+set(VERSION_INFO_PATCH_VERSION git) # increment patch for bug fixes and docs
+include(Version) # setup version info
+
 ########################################################################
 # Compiler specific setup
 ########################################################################
@@ -146,3 +152,9 @@ INSTALL(
     FILES ${CMAKE_CURRENT_BINARY_DIR}/librtlsdr.pc
     DESTINATION ${LIB_INSTALL_DIR}/pkgconfig
 )
+
+########################################################################
+# Print Summary
+########################################################################
+MESSAGE(STATUS "Building for version: ${VERSION} / ${LIBVER}")
+MESSAGE(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")

+ 60 - 0
cmake/Modules/Version.cmake

@@ -0,0 +1,60 @@
+# Copyright 2013 OSMOCOM Project
+#
+# This file is part of rtl-sdr
+#
+# rtl-sdr is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# rtl-sdr 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 for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with rtl-sdr; see the file COPYING.  If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+
+if(DEFINED __INCLUDED_VERSION_CMAKE)
+    return()
+endif()
+set(__INCLUDED_VERSION_CMAKE TRUE)
+
+# VERSION_INFO_* variables must be provided by user
+set(MAJOR_VERSION ${VERSION_INFO_MAJOR_VERSION})
+set(MINOR_VERSION ${VERSION_INFO_MINOR_VERSION})
+set(PATCH_VERSION ${VERSION_INFO_PATCH_VERSION})
+
+########################################################################
+# Extract the version string from git describe.
+########################################################################
+find_package(Git QUIET)
+
+if(GIT_FOUND)
+    message(STATUS "Extracting version information from git describe...")
+    execute_process(
+        COMMAND ${GIT_EXECUTABLE} describe --always --abbrev=4 --long
+        OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE
+        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+    )
+else()
+    set(GIT_DESCRIBE "v${MAJOR_VERSION}.${MINOR_VERSION}.x-xxx-xunknown")
+endif()
+
+########################################################################
+# Use the logic below to set the version constants
+########################################################################
+if("${PATCH_VERSION}" STREQUAL "git")
+    # VERSION: 3.6git-xxx-gxxxxxxxx
+    # LIBVER:  3.6git
+    set(VERSION "${GIT_DESCRIBE}")
+    set(LIBVER  "${MAJOR_VERSION}.${MINOR_VERSION}${PATCH_VERSION}")
+else()
+    # This is a numbered release.
+    # VERSION: 3.6.1
+    # LIBVER:  3.6.1
+    set(VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
+    set(LIBVER "${VERSION}")
+endif()

+ 2 - 1
src/CMakeLists.txt

@@ -35,7 +35,8 @@ target_link_libraries(rtlsdr_shared
 
 set_target_properties(rtlsdr_shared PROPERTIES DEFINE_SYMBOL "rtlsdr_EXPORTS")
 set_target_properties(rtlsdr_shared PROPERTIES OUTPUT_NAME rtlsdr)
-set_target_properties(rtlsdr_shared PROPERTIES SOVERSION 0 VERSION 0.0.0)
+set_target_properties(rtlsdr_shared PROPERTIES SOVERSION ${MAJOR_VERSION})
+set_target_properties(rtlsdr_shared PROPERTIES VERSION ${LIBVER})
 
 add_library(rtlsdr_static STATIC
     librtlsdr.c