commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 01/01: cmake/docs: Move min versions into a


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/01: cmake/docs: Move min versions into a single spot, put them all into vars
Date: Mon, 27 Mar 2017 02:11:18 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch master
in repository gnuradio.

commit bcf47d4936f6f24175731f5e4c28a42f3d5de701
Author: Martin Braun <address@hidden>
Date:   Wed Feb 15 12:41:57 2017 -0800

    cmake/docs: Move min versions into a single spot, put them all into vars
    
    - Autogen docs appropriately
    - Make it easier to maintain min versions
---
 CMakeLists.txt                                     | 136 +++++++++++++++------
 cmake/Modules/GrBoost.cmake                        |   4 +-
 docs/doxygen/CMakeLists.txt                        |   4 +
 .../other/{build_guide.dox => build_guide.dox.in}  |  33 +++--
 4 files changed, 123 insertions(+), 54 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index eab6d9b..4784815 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,16 +25,18 @@ endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
 ########################################################################
 # Project setup
 ########################################################################
+# Make sure this version matches ${GR_CMAKE_MIN_VERSION} (a variable can't be
+# used here).
 cmake_minimum_required(VERSION 2.6)
 project(gnuradio CXX C)
 enable_testing()
 
-#make sure our local CMake Modules path comes first
+# Make sure our local CMake Modules path comes first
 list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)
 
 include(GrBuildTypes)
 
-#select the release build type by default to get optimization flags
+# Select the release build type by default to get optimization flags
 if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE "Release")
    message(STATUS "Build type not specified: defaulting to release.")
@@ -50,41 +52,23 @@ set(VERSION_INFO_MINOR_VERSION 12)
 set(VERSION_INFO_MAINT_VERSION git)
 include(GrVersion) #setup version info
 
-# Append -O2 optimization flag for Debug builds (Not on MSVC since conflicts 
with RTC1 flag)
-IF (NOT MSVC)
-    SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2")
-    SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O2")
-ENDIF()
+# Minimum dependency versions for central dependencies:
+set(GR_BOOST_MIN_VERSION "1.48")
+set(GR_SWIG_MIN_VERSION "2.0.3")
+set(GR_CMAKE_MIN_VERSION "2.8.12")
+set(GR_MAKO_MIN_VERSION "0.4.2")
+set(GR_PYTHON_MIN_VERSION "2.7")
+#set(GR_PYTHON3_MIN_VERSION "3.x") # Py3k not yet supported
+set(GR_CPPUNIT_MIN_VERSION "1.12.1")
+set(GCC_MIN_VERSION "4.4.0")
+set(CLANG_MIN_VERSION "3.3.0")
+set(APPLECLANG_MIN_VERSION "500")
 
-# Set C/C++ standard for all targets
-# NOTE: Starting with cmake v3.1 this should be used:
-# set(CMAKE_C_STANDARD 90)
-# set(CMAKE_CXX_STANDARD 98)
-
-IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
-ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
-ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
-    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
-ELSE()
-    message(warning "C++ standard could not be set because compiler is not 
GNU, Clang or MSVC.")
-ENDIF()
-
-IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
-    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
-ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "Clang")
-    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
-ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
-    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
-ELSE()
-    message(warning "C standard could not be set because compiler is not GNU, 
Clang or MSVC.")
-ENDIF()
-
-# Set cmake policies.
+########################################################################
+# Configure CMake policies
+########################################################################
 # This will suppress developer warnings during the cmake process that can occur
 # if a newer cmake version than the minimum is used.
-
 if(POLICY CMP0026)
     cmake_policy(SET CMP0026 OLD)
 endif()
@@ -99,6 +83,81 @@ if(POLICY CMP0046)
 endif()
 
 ########################################################################
+# Compiler version setup
+########################################################################
+# Append -O2 optimization flag for Debug builds (Not on MSVC since conflicts 
with RTC1 flag)
+IF (NOT MSVC)
+    SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O2")
+    SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O2")
+ENDIF()
+
+# Check compiler version against our minimum
+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+    IF(DEFINED CMAKE_CXX_COMPILER_VERSION)
+        IF(${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS ${GCC_MIN_VERSION})
+            MESSAGE(WARNING "\nThe compiler selected to build GNU Radio (GCC 
version ${CMAKE_CXX_COMPILER_VERSION} : ${CMAKE_CXX_COMPILER}) is older than 
that officially supported (${GCC_MIN_VERSION} minimum). This build may or not 
work. We highly recommend using a more recent GCC version.")
+        ENDIF()
+    ELSE()
+        MESSAGE(WARNING "\nCannot determine the version of the compiler 
selected to build GNU Radio (GCC : ${CMAKE_CXX_COMPILER}). This build may or 
not work. We highly recommend using GCC version ${GCC_MIN_VERSION} or more 
recent.")
+    ENDIF()
+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+    EXECUTE_PROCESS(COMMAND
+        ${CMAKE_CXX_COMPILER} -v
+        RESULT_VARIABLE _res ERROR_VARIABLE _err
+        ERROR_STRIP_TRAILING_WHITESPACE)
+    IF(${_res} STREQUAL "0")
+        # output is in error stream
+        STRING(REGEX MATCH "^Apple.*" IS_APPLE ${_err})
+        IF("${IS_APPLE}" STREQUAL "")
+            SET(MIN_VERSION ${CLANG_MIN_VERSION})
+            SET(APPLE_STR "")
+            # retrieve the compiler's version from it
+            STRING(REGEX MATCH "clang version [0-9.]+" CLANG_OTHER_VERSION 
${_err})
+            STRING(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_OTHER_VERSION})
+        ELSE()
+            SET(MIN_VERSION ${APPLECLANG_MIN_VERSION})
+            SET(APPLE_STR "Apple ")
+            # retrieve the compiler's version from it
+            STRING(REGEX MATCH "(clang-[0-9.]+)" CLANG_APPLE_VERSION ${_err})
+            STRING(REGEX MATCH "[0-9.]+" CLANG_VERSION ${CLANG_APPLE_VERSION})
+        ENDIF()
+        IF(${CLANG_VERSION} VERSION_LESS "${MIN_VERSION}")
+            MESSAGE(WARNING "\nThe compiler selected to build GNU Radio 
(${APPLE_STR}Clang version ${CLANG_VERSION} : ${CMAKE_CXX_COMPILER}) is older 
than that officially supported (${MIN_VERSION} minimum). This build may or not 
work. We highly recommend using Apple Clang version ${APPLECLANG_MIN_VERSION} 
or more recent, or Clang version ${CLANG_MIN_VERSION} or more recent.")
+        ENDIF()
+    ELSE()
+        MESSAGE(WARNING "\nCannot determine the version of the compiler 
selected to build GNU Radio (${APPLE_STR}Clang : ${CMAKE_CXX_COMPILER}). This 
build may or not work. We highly recommend using Apple Clang version 
${APPLECLANG_MIN_VERSION} or more recent, or Clang version ${CLANG_MIN_VERSION} 
or more recent.")
+    ENDIF()
+ELSE()
+    MESSAGE(status "Skipping compiler version check.")
+ENDIF()
+
+# Configure C++ and C standards
+IF(CMAKE_VERSION VERSION_LESS "3.1")
+    IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
+    ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
+    ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
+        SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")
+    ELSE()
+        MESSAGE(warning "C++ standard could not be set because compiler is not 
GNU, Clang or MSVC.")
+    ENDIF()
+
+    IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")
+        SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+    ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "Clang")
+        SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99")
+    ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")
+        SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11")
+    ELSE()
+        MESSAGE(warning "C standard could not be set because compiler is not 
GNU, Clang or MSVC.")
+    ENDIF()
+ELSE()
+    SET(CMAKE_C_STANDARD 90)
+    SET(CMAKE_CXX_STANDARD 98)
+ENDIF()
+
+########################################################################
 # Environment setup
 ########################################################################
 IF(NOT DEFINED BOOST_ROOT)
@@ -283,15 +342,12 @@ include(GrBoost)
 ########################################################################
 # Enable python component
 ########################################################################
-find_package(PythonLibs 2)
+find_package(PythonLibs ${GR_PYTHON_MIN_VERSION})
 find_package(SWIG)
 
 if(SWIG_FOUND)
-  # Minimum SWIG version required is 2.0.4
-  # Recommended revisit: EOL of Ubuntu 12.04 LTS, bump to 2.0.7
-  # see https://github.com/gnuradio/gnuradio/issues/1222
     set(SWIG_VERSION_CHECK FALSE)
-    if("${SWIG_VERSION}" VERSION_GREATER "2.0.3")
+    if("${SWIG_VERSION}" VERSION_GREATER ${GR_SWIG_MIN_VERSION})
         set(SWIG_VERSION_CHECK TRUE)
     endif()
 endif(SWIG_FOUND)
@@ -303,7 +359,7 @@ GR_REGISTER_COMPONENT("python-support" ENABLE_PYTHON
     SWIG_VERSION_CHECK
 )
 
-find_package(CppUnit)
+find_package(CppUnit ${GR_CPPUNIT_MIN_VERSION})
 GR_REGISTER_COMPONENT("testing-support" ENABLE_TESTING
     CPPUNIT_FOUND
 )
diff --git a/cmake/Modules/GrBoost.cmake b/cmake/Modules/GrBoost.cmake
index 39a78c5..150009a 100644
--- a/cmake/Modules/GrBoost.cmake
+++ b/cmake/Modules/GrBoost.cmake
@@ -68,15 +68,13 @@ if(MSVC)
     endif(BOOST_ALL_DYN_LINK)
 endif(MSVC)
 
-find_package(Boost "1.35" COMPONENTS ${BOOST_REQUIRED_COMPONENTS})
+find_package(Boost ${GR_BOOST_MIN_VERSION} COMPONENTS 
${BOOST_REQUIRED_COMPONENTS})
 
 # This does not allow us to disable specific versions. It is used
 # internally by cmake to know the formation newer versions. As newer
 # Boost version beyond what is shown here are produced, we must extend
 # this list. To disable Boost versions, see below.
 set(Boost_ADDITIONAL_VERSIONS
-    "1.35.0" "1.35" "1.36.0" "1.36" "1.37.0" "1.37" "1.38.0" "1.38" "1.39.0" 
"1.39"
-    "1.40.0" "1.40" "1.41.0" "1.41" "1.42.0" "1.42" "1.43.0" "1.43" "1.44.0" 
"1.44"
     "1.45.0" "1.45" "1.46.0" "1.46" "1.47.0" "1.47" "1.48.0" "1.48" "1.49.0" 
"1.49"
     "1.50.0" "1.50" "1.51.0" "1.51" "1.52.0" "1.52" "1.53.0" "1.53" "1.54.0" 
"1.54"
     "1.55.0" "1.55" "1.56.0" "1.56" "1.57.0" "1.57" "1.58.0" "1.58" "1.59.0" 
"1.59"
diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt
index a837bd8..faa1fbc 100644
--- a/docs/doxygen/CMakeLists.txt
+++ b/docs/doxygen/CMakeLists.txt
@@ -34,6 +34,10 @@ configure_file(
     ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in
     ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
 @ONLY)
+configure_file(
+    ${CMAKE_CURRENT_SOURCE_DIR}/other/build_guide.dox.in
+    ${CMAKE_CURRENT_BINARY_DIR}/other/build_guide.dox
address@hidden)
 
 set(BUILT_DIRS ${CMAKE_CURRENT_BINARY_DIR}/xml 
${CMAKE_CURRENT_BINARY_DIR}/html)
 
diff --git a/docs/doxygen/other/build_guide.dox 
b/docs/doxygen/other/build_guide.dox.in
similarity index 86%
rename from docs/doxygen/other/build_guide.dox
rename to docs/doxygen/other/build_guide.dox.in
index f3bea60..68e5406 100644
--- a/docs/doxygen/other/build_guide.dox
+++ b/docs/doxygen/other/build_guide.dox.in
@@ -16,8 +16,8 @@ if any, to build the various GNU Radio components.
 
 Most of these components do not need to be individually compiled or
 installed. Instead, rely on your operating system's package manager or
-binary installation process (the <b>apt-get</b> system in Debian and
-Ubuntu, <b>yum</b> in RedHat and Fedora, etc.). GNU Radio tries to keep an
+binary installation process (the <b>apt-get</b> or \b apt system in Debian and
+Ubuntu, <b>yum</b> or \b dnf in RedHat and Fedora, etc.). GNU Radio tries to 
keep an
 up-to-date build guide for the majority of the supported operating
 systems on gnuradio.org
 (http://gnuradio.org/redmine/projects/gnuradio/wiki/BuildGuide).
@@ -33,16 +33,24 @@ installation tool (apt-get, pkg_install, YaST, yum, urpmi, 
etc.)
 first. Most recent systems have these packages available.
 
 \subsection dep_global Global Dependencies
-\li git                      http://git-scm.com/downloads
-\li cmake       (>= 2.6.3)   http://www.cmake.org/cmake/resources/software.html
-\li boost       (>= 1.35)    http://www.boost.org/users/download/
-\li cppunit     (>= 1.9.14)  http://freedesktop.org/wiki/Software/cppunit/
-\li fftw3f      (>= 3.0.1)   http://www.fftw.org/download.html
+
+\li git                                        http://git-scm.com/downloads
+\li cmake       (>= @GR_CMAKE_MIN_VERSION@)    
http://www.cmake.org/cmake/resources/software.html
+\li boost       (>= @GR_BOOST_MIN_VERSION@)    
http://www.boost.org/users/download/
+\li cppunit     (>= @GR_CPPUNIT_MIN_VERSION@)  
http://freedesktop.org/wiki/Software/cppunit/
+\li mako        (>= @GR_MAKO_MIN_VERSION@)     
http://www.makotemplates.org/download.html
+
+A C/C++ compiler is also required. These are known to work:
+
+\li gcc/g++     (>= @GCC_MIN_VERSION@)         
https://gcc.gnu.org/install/download.html
+\li clang/clang++ (>= @CLANG_MIN_VERSION@)     
http://releases.llvm.org/download.html
+
+Other compilers may work, but are not supported.
 
 \subsection dep_python Python Wrappers
-\li python      (>= 2.5)     http://www.python.org/download/
-\li swig        (>= 1.3.31)  http://www.swig.org/download.html
-\li numpy       (>= 1.1.0)   http://sourceforge.net/projects/numpy/files/NumPy/
+\li python      (>= @GR_PYTHON_MIN_VERSION@)   http://www.python.org/download/
+\li swig        (>= @GR_SWIG_MIN_VERSION@)     
http://www.swig.org/download.html
+\li numpy       (>= 1.1.0)                     
http://sourceforge.net/projects/numpy/files/NumPy/
 
 \subsection dep_docs docs: Building the documentation
 \li doxygen     (>= 1.5)     http://www.stack.nl/~dimitri/doxygen/download.html
@@ -52,6 +60,9 @@ first. Most recent systems have these packages available.
 \li Cheetah     (>= 2.0)     http://www.cheetahtemplate.org/
 \li pygtk       (>= 2.10)    http://www.pygtk.org/downloads.html
 
+\subsection dep_fft gr-fft: Fast Frequency Transform
+\li fftw3f      (>= 3.0.1)   http://www.fftw.org/download.html
+
 \subsection dep_wavelet gr-wavelet: Collection of wavelet blocks
 \li gsl         (>= 1.10)    http://gnuwin32.sourceforge.net/packages/gsl.htm
 
@@ -79,7 +90,7 @@ one(s) that are right for your system. On Linux, don't expect
 audio-osx and audio-windows to be either satisfied or built.
 
 \subsection dep_uhd uhd: The Ettus USRP Hardware Driver Interface
-\li uhd         (>= 3.0.0)   
http://code.ettus.com/redmine/ettus/projects/uhd/wiki
+\li uhd         (>= 3.5.5)   https://www.ettus.com/downloads
 
 \subsection dep_gr_video_sdl gr-video-sdl: PAL and NTSC display
 \li SDL                (>= 1.2.0)   http://www.libsdl.org/download-1.2.php



reply via email to

[Prev in Thread] Current Thread [Next in Thread]