<p>ptrkrysik <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/gr-gsm/+/24060">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  ptrkrysik: Looks good to me, approved; Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">GNU Radio 3.8 support<br><br>https://wiki.gnuradio.org/index.php/GNU_Radio_3.8_OOT_Module_Porting_Guide<br><br>Change-Id: I23dd638c8c48ed0a4b50559ce33fbd5e60b7dcbc<br>---<br>M CMakeLists.txt<br>M apps/CMakeLists.txt<br>M apps/helpers/CMakeLists.txt<br>D cmake/Modules/CreateSymlink.cmake<br>D cmake/Modules/FindGnuradioRuntime.cmake<br>D cmake/Modules/FindSWIG.cmake<br>D cmake/Modules/FindVolk.cmake<br>D cmake/Modules/GrMiscUtils.cmake<br>D cmake/Modules/GrPlatform.cmake<br>D cmake/Modules/GrPython.cmake<br>D cmake/Modules/GrSwig.cmake<br>D cmake/Modules/GrTest.cmake<br>D cmake/Modules/GrVersion.cmake<br>M cmake/Modules/GrccCompile.cmake<br>D cmake/Modules/GrccCompileWrapper.sh<br>D cmake/Modules/UseSWIG.cmake<br>A cmake/Modules/targetConfig.cmake.in<br>M docs/CMakeLists.txt<br>M docs/doxygen/CMakeLists.txt<br>M docs/doxygen/Doxyfile.in<br>M docs/doxygen/Doxyfile.swig_doc.in<br>M docs/doxygen/doxyxml/__init__.py<br>M docs/doxygen/doxyxml/base.py<br>M docs/doxygen/doxyxml/doxyindex.py<br>M docs/doxygen/doxyxml/generated/__init__.py<br>M docs/doxygen/doxyxml/generated/compound.py<br>M docs/doxygen/doxyxml/generated/compoundsuper.py<br>M docs/doxygen/doxyxml/generated/index.py<br>M docs/doxygen/doxyxml/generated/indexsuper.py<br>M docs/doxygen/doxyxml/text.py<br>M docs/doxygen/swig_doc.py<br>M lib/CMakeLists.txt<br>M python/CMakeLists.txt<br>M python/__init__.py<br>M python/misc_utils/fn_time.py<br>M python/qa_burst_printer.py<br>M python/qa_message_printer.py<br>M python/receiver/fcch_burst_tagger.py<br>M python/receiver/sch_detector.py<br>M swig/CMakeLists.txt<br>40 files changed, 1,602 insertions(+), 2,436 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/CMakeLists.txt b/CMakeLists.txt</span><br><span>index 27a3df7..f73bfbe 100644</span><br><span>--- a/CMakeLists.txt</span><br><span>+++ b/CMakeLists.txt</span><br><span>@@ -1,6 +1,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2011,2012 Free Software Foundation, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -17,225 +18,136 @@</span><br><span> # the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span> # Boston, MA 02110-1301, USA.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> ########################################################################</span><br><span> # Project setup</span><br><span> ########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-cmake_minimum_required(VERSION 2.6)</span><br><span style="color: hsl(120, 100%, 40%);">+cmake_minimum_required(VERSION 3.8)</span><br><span> project(gr-gsm CXX C)</span><br><span> enable_testing()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#set(CMAKE_BUILD_TYPE "Debug")</span><br><span style="color: hsl(0, 100%, 40%);">-#select the release build type by default to get optimization flags</span><br><span style="color: hsl(120, 100%, 40%);">+# Install to PyBOMBS target prefix if defined</span><br><span style="color: hsl(120, 100%, 40%);">+if(DEFINED ENV{PYBOMBS_PREFIX})</span><br><span style="color: hsl(120, 100%, 40%);">+    set(CMAKE_INSTALL_PREFIX $ENV{PYBOMBS_PREFIX})</span><br><span style="color: hsl(120, 100%, 40%);">+    message(STATUS "PyBOMBS installed GNU Radio. Setting CMAKE_INSTALL_PREFIX to $ENV{PYBOMBS_PREFIX}")</span><br><span style="color: hsl(120, 100%, 40%);">+endif()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Select the release build type by default to get optimization flags</span><br><span> if(NOT CMAKE_BUILD_TYPE)</span><br><span>    set(CMAKE_BUILD_TYPE "Release")</span><br><span>    message(STATUS "Build type not specified: defaulting to release.")</span><br><span> endif(NOT CMAKE_BUILD_TYPE)</span><br><span> set(CMAKE_BUILD_TYPE ${CMAKE_BUILD_TYPE} CACHE STRING "")</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Set cmake policies.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# This will suppress developer warnings during the cmake process that can occur</span><br><span style="color: hsl(0, 100%, 40%);">-# if a newer cmake version than the minimum is used.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(POLICY CMP0026)</span><br><span style="color: hsl(0, 100%, 40%);">-    cmake_policy(SET CMP0026 OLD)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-if(POLICY CMP0043)</span><br><span style="color: hsl(0, 100%, 40%);">-    cmake_policy(SET CMP0043 OLD)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-if(POLICY CMP0045)</span><br><span style="color: hsl(0, 100%, 40%);">-    cmake_policy(SET CMP0045 OLD)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-if(POLICY CMP0046)</span><br><span style="color: hsl(0, 100%, 40%);">-    cmake_policy(SET CMP0046 OLD)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Set version variables (</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Make sure our local CMake Modules path comes first</span><br><span style="color: hsl(120, 100%, 40%);">+list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake/Modules)</span><br><span> </span><br><span> # Set the version information here</span><br><span style="color: hsl(0, 100%, 40%);">-set(VERSION_INFO_MAJOR_VERSION 0)</span><br><span style="color: hsl(0, 100%, 40%);">-set(VERSION_INFO_API_COMPAT    42)</span><br><span style="color: hsl(0, 100%, 40%);">-set(VERSION_INFO_MINOR_VERSION 2)</span><br><span style="color: hsl(0, 100%, 40%);">-set(VERSION_INFO_MAINT_VERSION )</span><br><span style="color: hsl(0, 100%, 40%);">-include(GrVersion) #setup version info</span><br><span style="color: hsl(120, 100%, 40%);">+set(VERSION_MAJOR 1)</span><br><span style="color: hsl(120, 100%, 40%);">+set(VERSION_API    0)</span><br><span style="color: hsl(120, 100%, 40%);">+set(VERSION_ABI 0)</span><br><span style="color: hsl(120, 100%, 40%);">+set(VERSION_PATCH git)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+cmake_policy(SET CMP0011 NEW)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Enable generation of compile_commands.json for code completion engines</span><br><span style="color: hsl(120, 100%, 40%);">+set(CMAKE_EXPORT_COMPILE_COMMANDS ON)</span><br><span> </span><br><span> ########################################################################</span><br><span> # Compiler specific setup</span><br><span> ########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-if(CMAKE_COMPILER_IS_GNUCXX AND NOT WIN32)</span><br><span style="color: hsl(120, 100%, 40%);">+if((CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR</span><br><span style="color: hsl(120, 100%, 40%);">+    CMAKE_CXX_COMPILER_ID STREQUAL "GNU")</span><br><span style="color: hsl(120, 100%, 40%);">+    AND NOT WIN32)</span><br><span>     #http://gcc.gnu.org/wiki/Visibility</span><br><span>     add_definitions(-fvisibility=hidden)</span><br><span> endif()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Find boost</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-if(UNIX AND EXISTS "/usr/lib64")</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND BOOST_LIBRARYDIR "/usr/lib64") #fedora 64-bit fix</span><br><span style="color: hsl(0, 100%, 40%);">-endif(UNIX AND EXISTS "/usr/lib64")</span><br><span style="color: hsl(0, 100%, 40%);">-set(Boost_ADDITIONAL_VERSIONS</span><br><span style="color: hsl(0, 100%, 40%);">-    "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"</span><br><span style="color: hsl(0, 100%, 40%);">-    "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"</span><br><span style="color: hsl(0, 100%, 40%);">-    "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"</span><br><span style="color: hsl(0, 100%, 40%);">-    "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"</span><br><span style="color: hsl(0, 100%, 40%);">-    "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"</span><br><span style="color: hsl(0, 100%, 40%);">-    "1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"</span><br><span style="color: hsl(0, 100%, 40%);">-    "1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Boost "1.35" COMPONENTS filesystem system thread)</span><br><span style="color: hsl(120, 100%, 40%);">+IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")</span><br><span style="color: hsl(120, 100%, 40%);">+    SET(CMAKE_CXX_STANDARD 11)</span><br><span style="color: hsl(120, 100%, 40%);">+ELSEIF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")</span><br><span style="color: hsl(120, 100%, 40%);">+    SET(CMAKE_CXX_STANDARD 11)</span><br><span style="color: hsl(120, 100%, 40%);">+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")</span><br><span style="color: hsl(120, 100%, 40%);">+    SET(CMAKE_CXX_STANDARD 11)</span><br><span style="color: hsl(120, 100%, 40%);">+ELSE()</span><br><span style="color: hsl(120, 100%, 40%);">+    message(WARNING "C++ standard could not be set because compiler is not GNU, Clang or MSVC.")</span><br><span style="color: hsl(120, 100%, 40%);">+ENDIF()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT Boost_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "Boost required to compile gr-gsm")</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(SWIG)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(SWIG_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    # Minimum SWIG version required is 1.3.31</span><br><span style="color: hsl(0, 100%, 40%);">-    set(SWIG_VERSION_CHECK FALSE)</span><br><span style="color: hsl(0, 100%, 40%);">-    if("${SWIG_VERSION}" VERSION_GREATER "1.3.30")</span><br><span style="color: hsl(0, 100%, 40%);">-        set(SWIG_VERSION_CHECK TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-else()</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "SWIG required to compile gr-gsm")</span><br><span style="color: hsl(0, 100%, 40%);">-endif(SWIG_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+IF(CMAKE_C_COMPILER_ID STREQUAL "GNU")</span><br><span style="color: hsl(120, 100%, 40%);">+    SET(CMAKE_C_STANDARD 11)</span><br><span style="color: hsl(120, 100%, 40%);">+ELSEIF(CMAKE_C_COMPILER_ID MATCHES "Clang")</span><br><span style="color: hsl(120, 100%, 40%);">+    SET(CMAKE_C_STANDARD 11)</span><br><span style="color: hsl(120, 100%, 40%);">+ELSEIF(CMAKE_C_COMPILER_ID STREQUAL "MSVC")</span><br><span style="color: hsl(120, 100%, 40%);">+    SET(CMAKE_C_STANDARD 11)</span><br><span style="color: hsl(120, 100%, 40%);">+ELSE()</span><br><span style="color: hsl(120, 100%, 40%);">+    message(WARNING "C standard could not be set because compiler is not GNU, Clang or MSVC.")</span><br><span style="color: hsl(120, 100%, 40%);">+ENDIF()</span><br><span> </span><br><span> ########################################################################</span><br><span> # Install directories</span><br><span> ########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+find_package(Gnuradio "3.8" REQUIRED COMPONENTS blocks filter fft CONFIG)</span><br><span style="color: hsl(120, 100%, 40%);">+include(GrVersion)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> include(GrPlatform) #define LIB_SUFFIX</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_RUNTIME_DIR      bin)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_LIBRARY_DIR      lib${LIB_SUFFIX})</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if(NOT CMAKE_MODULES_DIR)</span><br><span style="color: hsl(120, 100%, 40%);">+  set(CMAKE_MODULES_DIR lib${LIB_SUFFIX}/cmake)</span><br><span style="color: hsl(120, 100%, 40%);">+endif(NOT CMAKE_MODULES_DIR)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> set(GR_INCLUDE_DIR      include/grgsm)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_INCLUDE_DIR      include/grgsm/misc_utils)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_INCLUDE_DIR      include/grgsm/receiver)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_INCLUDE_DIR      include/grgsm/demapping)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_INCLUDE_DIR      include/grgsm/decoding)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_DATA_DIR         share)</span><br><span style="color: hsl(120, 100%, 40%);">+set(GR_CMAKE_DIR        ${CMAKE_MODULES_DIR}/gsm)</span><br><span> set(GR_PKG_DATA_DIR     ${GR_DATA_DIR}/${CMAKE_PROJECT_NAME})</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_DOC_DIR          ${GR_DATA_DIR}/doc)</span><br><span> set(GR_PKG_DOC_DIR      ${GR_DOC_DIR}/${CMAKE_PROJECT_NAME})</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_CONF_DIR         etc)</span><br><span> set(GR_PKG_CONF_DIR     ${GR_CONF_DIR}/${CMAKE_PROJECT_NAME}/conf.d)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_LIBEXEC_DIR      libexec)</span><br><span> set(GR_PKG_LIBEXEC_DIR  ${GR_LIBEXEC_DIR}/${CMAKE_PROJECT_NAME})</span><br><span style="color: hsl(0, 100%, 40%);">-set(GRC_BLOCKS_DIR      ${GR_PKG_DATA_DIR}/grc/blocks)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Find gnuradio build dependencies</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_REQUIRED_COMPONENTS RUNTIME FILTER PMT)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Gnuradio)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Volk)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(CppUnit)</span><br><span style="color: hsl(0, 100%, 40%);">-#find_package(Doxygen)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-option(LOCAL_OSMOCOM "Build with local osmocom libraries" OFF)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Libosmocore)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Libosmocodec)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Libosmocoding)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Libosmogsm)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT PKG_CONFIG_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "pkg-config is required to compile gr-gsm")</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT GNURADIO_RUNTIME_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "GnuRadio Runtime required to compile gr-gsm")</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT VOLK_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "Volk library required to compile gr-gsm")</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT CPPUNIT_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "CppUnit required to compile gr-gsm")</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT LIBOSMOCORE_FOUND OR NOT LIBOSMOCODEC_FOUND OR NOT LIBOSMOGSM_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(LOCAL_OSMOCOM ON)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(LOCAL_OSMOCOM)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "Compiling with local osmocom libraries")</span><br><span style="color: hsl(0, 100%, 40%);">-elseif(NOT LIBOSMOCODING_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "Compiling local version of libosmocoding")</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Setup doxygen option</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-#if(DOXYGEN_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-#   option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)</span><br><span style="color: hsl(0, 100%, 40%);">-#else(DOXYGEN_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-      option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF) #TODO: write doxygen docs</span><br><span style="color: hsl(0, 100%, 40%);">-#endif(DOXYGEN_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Setup the include and linker paths</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-list (APPEND grgsm_include_directories</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_SOURCE_DIR}/lib</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_SOURCE_DIR}/include</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_BINARY_DIR}/lib</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_BINARY_DIR}/include</span><br><span style="color: hsl(0, 100%, 40%);">-    ${Boost_INCLUDE_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CPPUNIT_INCLUDE_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${GNURADIO_ALL_INCLUDE_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_SOURCE_DIR}/lib/decoding</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(LIBOSMOCORE_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    list (APPEND grgsm_include_directories</span><br><span style="color: hsl(0, 100%, 40%);">-       ${LIBOSMOCORE_INCLUDE_DIR}</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-include_directories(</span><br><span style="color: hsl(0, 100%, 40%);">-    ${grgsm_include_directories}</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-list (APPEND grgsm_link_directories</span><br><span style="color: hsl(0, 100%, 40%);">-    ${Boost_LIBRARY_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CPPUNIT_LIBRARY_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${GNURADIO_ALL_LIBRARY_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(LIBOSMOCORE_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-    list (APPEND grgsm_link_directories</span><br><span style="color: hsl(0, 100%, 40%);">-       ${LIBOSMOCORE_LIBRARY_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-link_directories(</span><br><span style="color: hsl(0, 100%, 40%);">-    ${grgsm_link_directories}</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# Set component parameters</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_GSM_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-set(GR_GSM_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/swig CACHE INTERNAL "" FORCE)</span><br><span> </span><br><span> ########################################################################</span><br><span> # On Apple only, set install name and use rpath correctly, if not already set</span><br><span> ########################################################################</span><br><span> if(APPLE)</span><br><span>     if(NOT CMAKE_INSTALL_NAME_DIR)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(CMAKE_INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install Name Destination Directory" FORCE)</span><br><span style="color: hsl(120, 100%, 40%);">+        set(CMAKE_INSTALL_NAME_DIR</span><br><span style="color: hsl(120, 100%, 40%);">+            ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE</span><br><span style="color: hsl(120, 100%, 40%);">+            PATH "Library Install Name Destination Directory" FORCE)</span><br><span>     endif(NOT CMAKE_INSTALL_NAME_DIR)</span><br><span>     if(NOT CMAKE_INSTALL_RPATH)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(cmakE_INSTALL_RPATH  ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE PATH "Library Install RPath" FORCE)</span><br><span style="color: hsl(120, 100%, 40%);">+        set(CMAKE_INSTALL_RPATH</span><br><span style="color: hsl(120, 100%, 40%);">+            ${CMAKE_INSTALL_PREFIX}/${GR_LIBRARY_DIR} CACHE</span><br><span style="color: hsl(120, 100%, 40%);">+            PATH "Library Install RPath" FORCE)</span><br><span>     endif(NOT CMAKE_INSTALL_RPATH)</span><br><span>     if(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE  BOOL "Do Build Using Library Install RPath" FORCE)</span><br><span style="color: hsl(120, 100%, 40%);">+        set(CMAKE_BUILD_WITH_INSTALL_RPATH ON CACHE</span><br><span style="color: hsl(120, 100%, 40%);">+            BOOL "Do Build Using Library Install RPath" FORCE)</span><br><span>     endif(NOT CMAKE_BUILD_WITH_INSTALL_RPATH)</span><br><span> endif(APPLE)</span><br><span> </span><br><span> ########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Find gnuradio build dependencies</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+find_package(Doxygen)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Find osmocom build dependencies</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+option(LOCAL_OSMOCOM "Build with local osmocom libraries" OFF)</span><br><span style="color: hsl(120, 100%, 40%);">+find_package(Libosmocore)</span><br><span style="color: hsl(120, 100%, 40%);">+find_package(Libosmocodec)</span><br><span style="color: hsl(120, 100%, 40%);">+find_package(Libosmocoding)</span><br><span style="color: hsl(120, 100%, 40%);">+find_package(Libosmogsm)</span><br><span style="color: hsl(120, 100%, 40%);">+if(NOT LIBOSMOCORE_FOUND OR NOT LIBOSMOCODEC_FOUND OR NOT LIBOSMOGSM_FOUND)</span><br><span style="color: hsl(120, 100%, 40%);">+    set(LOCAL_OSMOCOM ON)</span><br><span style="color: hsl(120, 100%, 40%);">+endif()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Setup doxygen option</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+if(DOXYGEN_FOUND)</span><br><span style="color: hsl(120, 100%, 40%);">+    option(ENABLE_DOXYGEN "Build docs using Doxygen" ON)</span><br><span style="color: hsl(120, 100%, 40%);">+else(DOXYGEN_FOUND)</span><br><span style="color: hsl(120, 100%, 40%);">+    option(ENABLE_DOXYGEN "Build docs using Doxygen" OFF)</span><br><span style="color: hsl(120, 100%, 40%);">+endif(DOXYGEN_FOUND)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span> # Create uninstall target</span><br><span> ########################################################################</span><br><span> configure_file(</span><br><span>@@ -245,28 +157,24 @@</span><br><span> </span><br><span> add_custom_target(uninstall</span><br><span>     ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(120, 100%, 40%);">+    )</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> ########################################################################</span><br><span> # Add subdirectories</span><br><span> ########################################################################</span><br><span> add_subdirectory(include/grgsm)</span><br><span> add_subdirectory(lib)</span><br><span style="color: hsl(120, 100%, 40%);">+add_subdirectory(apps)</span><br><span style="color: hsl(120, 100%, 40%);">+add_subdirectory(docs)</span><br><span> add_subdirectory(swig)</span><br><span> add_subdirectory(python)</span><br><span> add_subdirectory(grc)</span><br><span style="color: hsl(0, 100%, 40%);">-add_subdirectory(apps)</span><br><span style="color: hsl(0, 100%, 40%);">-add_subdirectory(docs)</span><br><span> </span><br><span> ########################################################################</span><br><span> # Install cmake search helper for this library</span><br><span> ########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-install(FILES cmake/Modules/gr-gsmConfig.cmake</span><br><span style="color: hsl(0, 100%, 40%);">-    DESTINATION lib${LIB_SUFFIX}/cmake/grgsm</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Print summary</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")</span><br><span style="color: hsl(0, 100%, 40%);">-message(STATUS "Building for version: ${VERSION} / ${LIBVER}")</span><br><span style="color: hsl(120, 100%, 40%);">+install(FILES cmake/Modules/gr-gsmConfig.cmake</span><br><span style="color: hsl(120, 100%, 40%);">+    DESTINATION ${CMAKE_MODULES_DIR}/gsm</span><br><span style="color: hsl(120, 100%, 40%);">+)</span><br><span>diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt</span><br><span>index 85e78d7..54a7774 100644</span><br><span>--- a/apps/CMakeLists.txt</span><br><span>+++ b/apps/CMakeLists.txt</span><br><span>@@ -1,6 +1,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2011 Free Software Foundation, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -20,7 +21,6 @@</span><br><span> include(GrPython)</span><br><span> include(GrccCompile)</span><br><span> add_subdirectory(helpers)</span><br><span style="color: hsl(0, 100%, 40%);">-#add_subdirectory(apps_data)</span><br><span> </span><br><span> GRCC_COMPILE(grgsm_livemon)</span><br><span> GRCC_COMPILE(grgsm_livemon_headless)</span><br><span>@@ -30,13 +30,13 @@</span><br><span> OPTION(ENABLE_GRGSM_LIVEMON "Compile grgsm_livemon" ON)</span><br><span> OPTION(ENABLE_GRGSM_LIVEMON_HEADLESS "Compile grgsm_livemon_headless" ON)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-if(ENABLE_GRCC AND ENABLE_GRGSM_LIVEMON)</span><br><span style="color: hsl(120, 100%, 40%);">+if(ENABLE_GRC AND ENABLE_GRCC AND ENABLE_GRGSM_LIVEMON)</span><br><span>     list (APPEND grgsm_flowgraphs ${CMAKE_CURRENT_BINARY_DIR}/grgsm_livemon)</span><br><span style="color: hsl(0, 100%, 40%);">-endif(ENABLE_GRCC AND ENABLE_GRGSM_LIVEMON)</span><br><span style="color: hsl(120, 100%, 40%);">+endif()</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-if(ENABLE_GRCC AND ENABLE_GRGSM_LIVEMON_HEADLESS)</span><br><span style="color: hsl(120, 100%, 40%);">+if(ENABLE_GRC AND ENABLE_GRCC AND ENABLE_GRGSM_LIVEMON_HEADLESS)</span><br><span>     list (APPEND grgsm_flowgraphs ${CMAKE_CURRENT_BINARY_DIR}/grgsm_livemon_headless)</span><br><span style="color: hsl(0, 100%, 40%);">-endif(ENABLE_GRCC AND ENABLE_GRGSM_LIVEMON_HEADLESS)</span><br><span style="color: hsl(120, 100%, 40%);">+endif()</span><br><span> </span><br><span> GR_PYTHON_INSTALL(</span><br><span>     PROGRAMS</span><br><span>@@ -50,9 +50,4 @@</span><br><span> # The add_dependencies(...) is very important for the parallel build `make -j $(nproc)`</span><br><span> # The `pygen_apps` target is generated in GR_PYTHON_INSTALL function which calls</span><br><span> # GR_UNIQUE_TARGET that we redefine in GrccCompile.</span><br><span style="color: hsl(0, 100%, 40%);">-add_dependencies(pygen_apps _grgsm_swig)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-install(</span><br><span style="color: hsl(0, 100%, 40%);">-    PROGRAMS</span><br><span style="color: hsl(0, 100%, 40%);">-    DESTINATION bin</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(120, 100%, 40%);">+add_dependencies(pygen_apps grgsm_swig)</span><br><span>diff --git a/apps/helpers/CMakeLists.txt b/apps/helpers/CMakeLists.txt</span><br><span>index a85319d..1eef9fe 100644</span><br><span>--- a/apps/helpers/CMakeLists.txt</span><br><span>+++ b/apps/helpers/CMakeLists.txt</span><br><span>@@ -1,6 +1,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2011 Free Software Foundation, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright 2011,2012,2014,2016,2018 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>diff --git a/cmake/Modules/CreateSymlink.cmake b/cmake/Modules/CreateSymlink.cmake</span><br><span>deleted file mode 100644</span><br><span>index 574c443..0000000</span><br><span>--- a/cmake/Modules/CreateSymlink.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,10 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#create logical links in order to keep legacy names of apps</span><br><span style="color: hsl(0, 100%, 40%);">-macro(CREATE_SYMLINK _source _dest)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(source ${CMAKE_CURRENT_SOURCE_DIR}/${_source})</span><br><span style="color: hsl(0, 100%, 40%);">-    set(dest ${CMAKE_CURRENT_BINARY_DIR}/${_dest})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND symlinks ${dest})</span><br><span style="color: hsl(0, 100%, 40%);">-    add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-        DEPENDS ${source} OUTPUT ${dest}</span><br><span style="color: hsl(0, 100%, 40%);">-        COMMAND ln -sf ${_source} ${_dest}</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(CREATE_SYMLINK)</span><br><span>diff --git a/cmake/Modules/FindGnuradioRuntime.cmake b/cmake/Modules/FindGnuradioRuntime.cmake</span><br><span>deleted file mode 100644</span><br><span>index afed684..0000000</span><br><span>--- a/cmake/Modules/FindGnuradioRuntime.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,36 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-INCLUDE(FindPkgConfig)</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(PC_GNURADIO_RUNTIME gnuradio-runtime)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(PC_GNURADIO_RUNTIME_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-  # look for include files</span><br><span style="color: hsl(0, 100%, 40%);">-  FIND_PATH(</span><br><span style="color: hsl(0, 100%, 40%);">-    GNURADIO_RUNTIME_INCLUDE_DIRS</span><br><span style="color: hsl(0, 100%, 40%);">-    NAMES gnuradio/top_block.h</span><br><span style="color: hsl(0, 100%, 40%);">-    HINTS $ENV{GNURADIO_RUNTIME_DIR}/include</span><br><span style="color: hsl(0, 100%, 40%);">-          ${PC_GNURADIO_RUNTIME_INCLUDE_DIRS}</span><br><span style="color: hsl(0, 100%, 40%);">-          ${CMAKE_INSTALL_PREFIX}/include</span><br><span style="color: hsl(0, 100%, 40%);">-    PATHS /usr/local/include</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/include</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # look for libs</span><br><span style="color: hsl(0, 100%, 40%);">-  FIND_LIBRARY(</span><br><span style="color: hsl(0, 100%, 40%);">-    GNURADIO_RUNTIME_LIBRARIES</span><br><span style="color: hsl(0, 100%, 40%);">-    NAMES gnuradio-runtime</span><br><span style="color: hsl(0, 100%, 40%);">-    HINTS $ENV{GNURADIO_RUNTIME_DIR}/lib</span><br><span style="color: hsl(0, 100%, 40%);">-          ${PC_GNURADIO_RUNTIME_LIBDIR}</span><br><span style="color: hsl(0, 100%, 40%);">-          ${CMAKE_INSTALL_PREFIX}/lib/</span><br><span style="color: hsl(0, 100%, 40%);">-          ${CMAKE_INSTALL_PREFIX}/lib64/</span><br><span style="color: hsl(0, 100%, 40%);">-    PATHS /usr/local/lib</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/local/lib64</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/lib</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/lib64</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  set(GNURADIO_RUNTIME_FOUND ${PC_GNURADIO_RUNTIME_FOUND})</span><br><span style="color: hsl(0, 100%, 40%);">-endif(PC_GNURADIO_RUNTIME_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-INCLUDE(FindPackageHandleStandardArgs)</span><br><span style="color: hsl(0, 100%, 40%);">-# do not check GNURADIO_RUNTIME_INCLUDE_DIRS, is not set when default include path us used.</span><br><span style="color: hsl(0, 100%, 40%);">-FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNURADIO_RUNTIME DEFAULT_MSG GNURADIO_RUNTIME_LIBRARIES)</span><br><span style="color: hsl(0, 100%, 40%);">-MARK_AS_ADVANCED(GNURADIO_RUNTIME_LIBRARIES GNURADIO_RUNTIME_INCLUDE_DIRS)</span><br><span>diff --git a/cmake/Modules/FindSWIG.cmake b/cmake/Modules/FindSWIG.cmake</span><br><span>deleted file mode 100644</span><br><span>index e10080d..0000000</span><br><span>--- a/cmake/Modules/FindSWIG.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,142 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#######################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Find the library for SWIG</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# The goal here is to intercept calls to "FIND_PACKAGE(SWIG)" in order</span><br><span style="color: hsl(0, 100%, 40%);">-# to do a global version check locally after passing on the "find" to</span><br><span style="color: hsl(0, 100%, 40%);">-# SWIG-provided scripts.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# make this file non-reentrant within the current context</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(__INCLUDED_FIND_SWIG_CMAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-    return()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(__INCLUDED_FIND_SWIG_CMAKE TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# some status messages</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-message(STATUS "")</span><br><span style="color: hsl(0, 100%, 40%);">-message(STATUS "Checking for module SWIG")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# First check to see if SWIG installed its own CMake file, or if the</span><br><span style="color: hsl(0, 100%, 40%);">-# one provided by CMake finds SWIG.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# save the current MODULE path</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-set(SAVED_CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# clear the current MODULE path; uses system paths only</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-unset(CMAKE_MODULE_PATH)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# try to find SWIG via the provided parameters,</span><br><span style="color: hsl(0, 100%, 40%);">-# handle REQUIRED internally later</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-unset(SWIG_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# was the version specified?</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-unset(LOCAL_SWIG_FIND_VERSION)</span><br><span style="color: hsl(0, 100%, 40%);">-if(SWIG_FIND_VERSION)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(LOCAL_SWIG_FIND_VERSION ${SWIG_FIND_VERSION})</span><br><span style="color: hsl(0, 100%, 40%);">-endif(SWIG_FIND_VERSION)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# was EXACT specified?</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-unset(LOCAL_SWIG_FIND_VERSION_EXACT)</span><br><span style="color: hsl(0, 100%, 40%);">-if(SWIG_FIND_VERSION_EXACT)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(LOCAL_SWIG_FIND_VERSION_EXACT "EXACT")</span><br><span style="color: hsl(0, 100%, 40%);">-endif(SWIG_FIND_VERSION_EXACT)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# was REQUIRED specified?</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-unset(LOCAL_SWIG_FIND_REQUIRED)</span><br><span style="color: hsl(0, 100%, 40%);">-if(SWIG_FIND_REQUIRED)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(LOCAL_SWIG_FIND_REQUIRED "REQUIRED")</span><br><span style="color: hsl(0, 100%, 40%);">-endif(SWIG_FIND_REQUIRED)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# try to find SWIG using the provided parameters, quietly;</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# this call will error out internally (and not quietly) if:</span><br><span style="color: hsl(0, 100%, 40%);">-# 1: EXACT is specified and the version found does not match the requested version;</span><br><span style="color: hsl(0, 100%, 40%);">-# 2: REQUIRED is set and SWIG was not found;</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# this call will return SWIG_FOUND == FALSE if REQUIRED is not set, and:</span><br><span style="color: hsl(0, 100%, 40%);">-# 1: SWIG was not found;</span><br><span style="color: hsl(0, 100%, 40%);">-# 2: The version found is less than the requested version.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(</span><br><span style="color: hsl(0, 100%, 40%);">-  SWIG</span><br><span style="color: hsl(0, 100%, 40%);">-  ${LOCAL_SWIG_FIND_VERSION}</span><br><span style="color: hsl(0, 100%, 40%);">-  ${LOCAL_SWIG_FIND_VERSION_EXACT}</span><br><span style="color: hsl(0, 100%, 40%);">-  ${LOCAL_SWIG_FIND_REQUIRED}</span><br><span style="color: hsl(0, 100%, 40%);">-  QUIET</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# restore CMAKE_MODULE_PATH</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-set(CMAKE_MODULE_PATH ${SAVED_CMAKE_MODULE_PATH})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# specific version checks</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-set(SWIG_VERSION_CHECK FALSE)</span><br><span style="color: hsl(0, 100%, 40%);">-if(SWIG_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # SWIG was found; make sure the version meets GR's needs</span><br><span style="color: hsl(0, 100%, 40%);">-  message(STATUS "Found SWIG version ${SWIG_VERSION}.")</span><br><span style="color: hsl(0, 100%, 40%);">-  if("${SWIG_VERSION}" VERSION_GREATER "1.3.30")</span><br><span style="color: hsl(0, 100%, 40%);">-    if(NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.3" AND</span><br><span style="color: hsl(0, 100%, 40%);">-       NOT "${SWIG_VERSION}" VERSION_EQUAL "3.0.4")</span><br><span style="color: hsl(0, 100%, 40%);">-      set(SWIG_VERSION_CHECK TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-    else()</span><br><span style="color: hsl(0, 100%, 40%);">-      message(STATUS "SWIG versions 3.0.3 and 3.0.4 fail to work with GNU Radio.")</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  else()</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "Minimum SWIG version required is 1.3.31 for GNU Radio.")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-else()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # SWIG was either not found, or is less than the requested version</span><br><span style="color: hsl(0, 100%, 40%);">-  if(SWIG_VERSION)</span><br><span style="color: hsl(0, 100%, 40%);">-    # SWIG_VERSION is set, but SWIG_FOUND is false; probably a version mismatch</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "Found SWIG version ${SWIG_VERSION}.")</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "Requested SWIG version is at least ${SWIG_FIND_VERSION}.")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# did the version check fail?</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT SWIG_VERSION_CHECK)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # yes: clear various variables and set FOUND to FALSE</span><br><span style="color: hsl(0, 100%, 40%);">-  message(STATUS "Disabling SWIG because version check failed.")</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(SWIG_VERSION CACHE)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(SWIG_DIR CACHE)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(SWIG_EXECUTABLE CACHE)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(SWIG_FOUND FALSE CACHE BOOL "Set to TRUE if a compatible version of SWIG is found" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# check to see if SWIG variables were set</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(SWIG_FOUND AND SWIG_DIR AND SWIG_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # yes: even if set SWIG_FOUND==TRUE, then these have already been</span><br><span style="color: hsl(0, 100%, 40%);">-  # done, but done quietly.  It does not hurt to redo them here.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  include(FindPackageHandleStandardArgs)</span><br><span style="color: hsl(0, 100%, 40%);">-  find_package_handle_standard_args(SWIG DEFAULT_MSG SWIG_EXECUTABLE SWIG_DIR)</span><br><span style="color: hsl(0, 100%, 40%);">-  mark_as_advanced(SWIG_EXECUTABLE SWIG_DIR)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-elseif(SWIG_FIND_REQUIRED)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if(SWIG_FIND_VERSION)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "The found SWIG version (${SWIG_VERSION}) is not compatible with the version required (${SWIG_FIND_VERSION}).")</span><br><span style="color: hsl(0, 100%, 40%);">-  else()</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "SWIG is required, but was not found.")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/cmake/Modules/FindVolk.cmake b/cmake/Modules/FindVolk.cmake</span><br><span>deleted file mode 100644</span><br><span>index 425eb01..0000000</span><br><span>--- a/cmake/Modules/FindVolk.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,26 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-INCLUDE(FindPkgConfig)</span><br><span style="color: hsl(0, 100%, 40%);">-PKG_CHECK_MODULES(PC_VOLK volk)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-FIND_PATH(</span><br><span style="color: hsl(0, 100%, 40%);">-    VOLK_INCLUDE_DIRS</span><br><span style="color: hsl(0, 100%, 40%);">-    NAMES volk/volk.h</span><br><span style="color: hsl(0, 100%, 40%);">-    HINTS $ENV{VOLK_DIR}/include</span><br><span style="color: hsl(0, 100%, 40%);">-        ${PC_VOLK_INCLUDEDIR}</span><br><span style="color: hsl(0, 100%, 40%);">-    PATHS /usr/local/include</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/include</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-FIND_LIBRARY(</span><br><span style="color: hsl(0, 100%, 40%);">-    VOLK_LIBRARIES</span><br><span style="color: hsl(0, 100%, 40%);">-    NAMES volk</span><br><span style="color: hsl(0, 100%, 40%);">-    HINTS $ENV{VOLK_DIR}/lib</span><br><span style="color: hsl(0, 100%, 40%);">-        ${PC_VOLK_LIBDIR}</span><br><span style="color: hsl(0, 100%, 40%);">-    PATHS /usr/local/lib</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/local/lib64</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/lib</span><br><span style="color: hsl(0, 100%, 40%);">-          /usr/lib64</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-INCLUDE(FindPackageHandleStandardArgs)</span><br><span style="color: hsl(0, 100%, 40%);">-FIND_PACKAGE_HANDLE_STANDARD_ARGS(VOLK DEFAULT_MSG VOLK_LIBRARIES VOLK_INCLUDE_DIRS)</span><br><span style="color: hsl(0, 100%, 40%);">-MARK_AS_ADVANCED(VOLK_LIBRARIES VOLK_INCLUDE_DIRS)</span><br><span>diff --git a/cmake/Modules/GrMiscUtils.cmake b/cmake/Modules/GrMiscUtils.cmake</span><br><span>deleted file mode 100644</span><br><span>index 04efa9e..0000000</span><br><span>--- a/cmake/Modules/GrMiscUtils.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,459 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2010-2011,2014 Free Software Foundation, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">-# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation; either version 3, or (at your option)</span><br><span style="color: hsl(0, 100%, 40%);">-# any later version.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">-# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">-# along with GNU Radio; see the file COPYING.  If not, write to</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span style="color: hsl(0, 100%, 40%);">-# Boston, MA 02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(DEFINED __INCLUDED_GR_MISC_UTILS_CMAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-    return()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(__INCLUDED_GR_MISC_UTILS_CMAKE TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Set global variable macro.</span><br><span style="color: hsl(0, 100%, 40%);">-# Used for subdirectories to export settings.</span><br><span style="color: hsl(0, 100%, 40%);">-# Example: include and library paths.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_SET_GLOBAL var)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(${var} ${ARGN} CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_SET_GLOBAL)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Set the pre-processor definition if the condition is true.</span><br><span style="color: hsl(0, 100%, 40%);">-#  - def the pre-processor definition to set and condition name</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_ADD_COND_DEF def)</span><br><span style="color: hsl(0, 100%, 40%);">-    if(${def})</span><br><span style="color: hsl(0, 100%, 40%);">-        add_definitions(-D${def})</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(${def})</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_ADD_COND_DEF)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Check for a header and conditionally set a compile define.</span><br><span style="color: hsl(0, 100%, 40%);">-#  - hdr the relative path to the header file</span><br><span style="color: hsl(0, 100%, 40%);">-#  - def the pre-processor definition to set</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_CHECK_HDR_N_DEF hdr def)</span><br><span style="color: hsl(0, 100%, 40%);">-    include(CheckIncludeFileCXX)</span><br><span style="color: hsl(0, 100%, 40%);">-    CHECK_INCLUDE_FILE_CXX(${hdr} ${def})</span><br><span style="color: hsl(0, 100%, 40%);">-    GR_ADD_COND_DEF(${def})</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_CHECK_HDR_N_DEF)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Include subdirectory macro.</span><br><span style="color: hsl(0, 100%, 40%);">-# Sets the CMake directory variables,</span><br><span style="color: hsl(0, 100%, 40%);">-# includes the subdirectory CMakeLists.txt,</span><br><span style="color: hsl(0, 100%, 40%);">-# resets the CMake directory variables.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This macro includes subdirectories rather than adding them</span><br><span style="color: hsl(0, 100%, 40%);">-# so that the subdirectory can affect variables in the level above.</span><br><span style="color: hsl(0, 100%, 40%);">-# This provides a work-around for the lack of convenience libraries.</span><br><span style="color: hsl(0, 100%, 40%);">-# This way a subdirectory can append to the list of library sources.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_INCLUDE_SUBDIRECTORY subdir)</span><br><span style="color: hsl(0, 100%, 40%);">-    #insert the current directories on the front of the list</span><br><span style="color: hsl(0, 100%, 40%);">-    list(INSERT _cmake_source_dirs 0 ${CMAKE_CURRENT_SOURCE_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(INSERT _cmake_binary_dirs 0 ${CMAKE_CURRENT_BINARY_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #set the current directories to the names of the subdirs</span><br><span style="color: hsl(0, 100%, 40%);">-    set(CMAKE_CURRENT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/${subdir})</span><br><span style="color: hsl(0, 100%, 40%);">-    set(CMAKE_CURRENT_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/${subdir})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #include the subdirectory CMakeLists to run it</span><br><span style="color: hsl(0, 100%, 40%);">-    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-    include(${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #reset the value of the current directories</span><br><span style="color: hsl(0, 100%, 40%);">-    list(GET _cmake_source_dirs 0 CMAKE_CURRENT_SOURCE_DIR)</span><br><span style="color: hsl(0, 100%, 40%);">-    list(GET _cmake_binary_dirs 0 CMAKE_CURRENT_BINARY_DIR)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #pop the subdir names of the front of the list</span><br><span style="color: hsl(0, 100%, 40%);">-    list(REMOVE_AT _cmake_source_dirs 0)</span><br><span style="color: hsl(0, 100%, 40%);">-    list(REMOVE_AT _cmake_binary_dirs 0)</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_INCLUDE_SUBDIRECTORY)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Check if a compiler flag works and conditionally set a compile define.</span><br><span style="color: hsl(0, 100%, 40%);">-#  - flag the compiler flag to check for</span><br><span style="color: hsl(0, 100%, 40%);">-#  - have the variable to set with result</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE flag have)</span><br><span style="color: hsl(0, 100%, 40%);">-    include(CheckCXXCompilerFlag)</span><br><span style="color: hsl(0, 100%, 40%);">-    CHECK_CXX_COMPILER_FLAG(${flag} ${have})</span><br><span style="color: hsl(0, 100%, 40%);">-    if(${have})</span><br><span style="color: hsl(0, 100%, 40%);">-      if(${CMAKE_VERSION} VERSION_GREATER "2.8.4")</span><br><span style="color: hsl(0, 100%, 40%);">-        STRING(FIND "${CMAKE_CXX_FLAGS}" "${flag}" flag_dup)</span><br><span style="color: hsl(0, 100%, 40%);">-        if(${flag_dup} EQUAL -1)</span><br><span style="color: hsl(0, 100%, 40%);">-          set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")</span><br><span style="color: hsl(0, 100%, 40%);">-          set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}")</span><br><span style="color: hsl(0, 100%, 40%);">-        endif(${flag_dup} EQUAL -1)</span><br><span style="color: hsl(0, 100%, 40%);">-      endif(${CMAKE_VERSION} VERSION_GREATER "2.8.4")</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(${have})</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_ADD_CXX_COMPILER_FLAG_IF_AVAILABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Generates the .la libtool file</span><br><span style="color: hsl(0, 100%, 40%);">-# This appears to generate libtool files that cannot be used by auto*.</span><br><span style="color: hsl(0, 100%, 40%);">-# Usage GR_LIBTOOL(TARGET [target] DESTINATION [dest])</span><br><span style="color: hsl(0, 100%, 40%);">-# Notice: there is not COMPONENT option, these will not get distributed.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_LIBTOOL)</span><br><span style="color: hsl(0, 100%, 40%);">-    if(NOT DEFINED GENERATE_LIBTOOL)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(GENERATE_LIBTOOL OFF) #disabled by default</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if(GENERATE_LIBTOOL)</span><br><span style="color: hsl(0, 100%, 40%);">-        include(CMakeParseArgumentsCopy)</span><br><span style="color: hsl(0, 100%, 40%);">-        CMAKE_PARSE_ARGUMENTS(GR_LIBTOOL "" "TARGET;DESTINATION" "" ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        find_program(LIBTOOL libtool)</span><br><span style="color: hsl(0, 100%, 40%);">-        if(LIBTOOL)</span><br><span style="color: hsl(0, 100%, 40%);">-            include(CMakeMacroLibtoolFile)</span><br><span style="color: hsl(0, 100%, 40%);">-            CREATE_LIBTOOL_FILE(${GR_LIBTOOL_TARGET} /${GR_LIBTOOL_DESTINATION})</span><br><span style="color: hsl(0, 100%, 40%);">-        endif(LIBTOOL)</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(GENERATE_LIBTOOL)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_LIBTOOL)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Do standard things to the library target</span><br><span style="color: hsl(0, 100%, 40%);">-# - set target properties</span><br><span style="color: hsl(0, 100%, 40%);">-# - make install rules</span><br><span style="color: hsl(0, 100%, 40%);">-# Also handle gnuradio custom naming conventions w/ extras mode.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_LIBRARY_FOO target)</span><br><span style="color: hsl(0, 100%, 40%);">-    #parse the arguments for component names</span><br><span style="color: hsl(0, 100%, 40%);">-    include(CMakeParseArgumentsCopy)</span><br><span style="color: hsl(0, 100%, 40%);">-    CMAKE_PARSE_ARGUMENTS(GR_LIBRARY "" "RUNTIME_COMPONENT;DEVEL_COMPONENT" "" ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #set additional target properties</span><br><span style="color: hsl(0, 100%, 40%);">-    set_target_properties(${target} PROPERTIES SOVERSION ${LIBVER})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #install the generated files like so...</span><br><span style="color: hsl(0, 100%, 40%);">-    install(TARGETS ${target}</span><br><span style="color: hsl(0, 100%, 40%);">-        LIBRARY DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .so/.dylib file</span><br><span style="color: hsl(0, 100%, 40%);">-        ARCHIVE DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_DEVEL_COMPONENT}   # .lib file</span><br><span style="color: hsl(0, 100%, 40%);">-        RUNTIME DESTINATION ${GR_RUNTIME_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT} # .dll file</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #extras mode enabled automatically on linux</span><br><span style="color: hsl(0, 100%, 40%);">-    if(NOT DEFINED LIBRARY_EXTRAS)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(LIBRARY_EXTRAS ${LINUX})</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #special extras mode to enable alternative naming conventions</span><br><span style="color: hsl(0, 100%, 40%);">-    if(LIBRARY_EXTRAS)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #create .la file before changing props</span><br><span style="color: hsl(0, 100%, 40%);">-        GR_LIBTOOL(TARGET ${target} DESTINATION ${GR_LIBRARY_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #give the library a special name with ultra-zero soversion</span><br><span style="color: hsl(0, 100%, 40%);">-        set_target_properties(${target} PROPERTIES OUTPUT_NAME ${target}-${LIBVER} SOVERSION "0.0.0")</span><br><span style="color: hsl(0, 100%, 40%);">-        set(target_name lib${target}-${LIBVER}.so.0.0.0)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #custom command to generate symlinks</span><br><span style="color: hsl(0, 100%, 40%);">-        add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-            TARGET ${target}</span><br><span style="color: hsl(0, 100%, 40%);">-            POST_BUILD</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND ${CMAKE_COMMAND} -E create_symlink ${target_name} ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND ${CMAKE_COMMAND} -E touch ${target_name} #so the symlinks point to something valid so cmake 2.6 will install</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #and install the extra symlinks</span><br><span style="color: hsl(0, 100%, 40%);">-        install(</span><br><span style="color: hsl(0, 100%, 40%);">-            FILES</span><br><span style="color: hsl(0, 100%, 40%);">-            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}.so</span><br><span style="color: hsl(0, 100%, 40%);">-            ${CMAKE_CURRENT_BINARY_DIR}/lib${target}-${LIBVER}.so.0</span><br><span style="color: hsl(0, 100%, 40%);">-            DESTINATION ${GR_LIBRARY_DIR} COMPONENT ${GR_LIBRARY_RUNTIME_COMPONENT}</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(LIBRARY_EXTRAS)</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_LIBRARY_FOO)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Create a dummy custom command that depends on other targets.</span><br><span style="color: hsl(0, 100%, 40%);">-# Usage:</span><br><span style="color: hsl(0, 100%, 40%);">-#   GR_GEN_TARGET_DEPS(unique_name target_deps <target1> <target2> ...)</span><br><span style="color: hsl(0, 100%, 40%);">-#   ADD_CUSTOM_COMMAND(<the usual args> ${target_deps})</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Custom command cant depend on targets, but can depend on executables,</span><br><span style="color: hsl(0, 100%, 40%);">-# and executables can depend on targets. So this is the process:</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_GEN_TARGET_DEPS name var)</span><br><span style="color: hsl(0, 100%, 40%);">-    file(</span><br><span style="color: hsl(0, 100%, 40%);">-        WRITE ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in</span><br><span style="color: hsl(0, 100%, 40%);">-        "int main(void){return 0;}\n"</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-    execute_process(</span><br><span style="color: hsl(0, 100%, 40%);">-        COMMAND ${CMAKE_COMMAND} -E copy_if_different</span><br><span style="color: hsl(0, 100%, 40%);">-        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp.in</span><br><span style="color: hsl(0, 100%, 40%);">-        ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-    add_executable(${name} ${CMAKE_CURRENT_BINARY_DIR}/${name}.cpp)</span><br><span style="color: hsl(0, 100%, 40%);">-    if(ARGN)</span><br><span style="color: hsl(0, 100%, 40%);">-        add_dependencies(${name} ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(ARGN)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if(CMAKE_CROSSCOMPILING)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(${var} "DEPENDS;${name}" PARENT_SCOPE) #cant call command when cross</span><br><span style="color: hsl(0, 100%, 40%);">-    else()</span><br><span style="color: hsl(0, 100%, 40%);">-        set(${var} "DEPENDS;${name};COMMAND;${name}" PARENT_SCOPE)</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_GEN_TARGET_DEPS)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Control use of gr_logger</span><br><span style="color: hsl(0, 100%, 40%);">-# Usage:</span><br><span style="color: hsl(0, 100%, 40%);">-#   GR_LOGGING()</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Will set ENABLE_GR_LOG to 1 by default.</span><br><span style="color: hsl(0, 100%, 40%);">-# Can manually set with -DENABLE_GR_LOG=0|1</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_LOGGING)</span><br><span style="color: hsl(0, 100%, 40%);">-  find_package(Log4cpp)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  OPTION(ENABLE_GR_LOG "Use gr_logger" ON)</span><br><span style="color: hsl(0, 100%, 40%);">-  if(ENABLE_GR_LOG)</span><br><span style="color: hsl(0, 100%, 40%);">-    # If gr_logger is enabled, make it usable</span><br><span style="color: hsl(0, 100%, 40%);">-    add_definitions( -DENABLE_GR_LOG )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    # also test LOG4CPP; if we have it, use this version of the logger</span><br><span style="color: hsl(0, 100%, 40%);">-    # otherwise, default to the stdout/stderr model.</span><br><span style="color: hsl(0, 100%, 40%);">-    if(LOG4CPP_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-      SET(HAVE_LOG4CPP True CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-      add_definitions( -DHAVE_LOG4CPP )</span><br><span style="color: hsl(0, 100%, 40%);">-    else(not LOG4CPP_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-      SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-      SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-      SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-      SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(LOG4CPP_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    SET(ENABLE_GR_LOG ${ENABLE_GR_LOG} CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  else(ENABLE_GR_LOG)</span><br><span style="color: hsl(0, 100%, 40%);">-    SET(HAVE_LOG4CPP False CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-    SET(LOG4CPP_INCLUDE_DIRS "" CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-    SET(LOG4CPP_LIBRARY_DIRS "" CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-    SET(LOG4CPP_LIBRARIES "" CACHE INTERNAL "" FORCE)</span><br><span style="color: hsl(0, 100%, 40%);">-  endif(ENABLE_GR_LOG)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  message(STATUS "ENABLE_GR_LOG set to ${ENABLE_GR_LOG}.")</span><br><span style="color: hsl(0, 100%, 40%);">-  message(STATUS "HAVE_LOG4CPP set to ${HAVE_LOG4CPP}.")</span><br><span style="color: hsl(0, 100%, 40%);">-  message(STATUS "LOG4CPP_LIBRARIES set to ${LOG4CPP_LIBRARIES}.")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_LOGGING)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Check if HAVE_PTHREAD_SETSCHEDPARAM and HAVE_SCHED_SETSCHEDULER</span><br><span style="color: hsl(0, 100%, 40%);">-#  should be defined</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_CHECK_LINUX_SCHED_AVAIL)</span><br><span style="color: hsl(0, 100%, 40%);">-set(CMAKE_REQUIRED_LIBRARIES -lpthread)</span><br><span style="color: hsl(0, 100%, 40%);">-    CHECK_CXX_SOURCE_COMPILES("</span><br><span style="color: hsl(0, 100%, 40%);">-        #include <pthread.h></span><br><span style="color: hsl(0, 100%, 40%);">-        int main(){</span><br><span style="color: hsl(0, 100%, 40%);">-            pthread_t pthread;</span><br><span style="color: hsl(0, 100%, 40%);">-            pthread_setschedparam(pthread,  0, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-            return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        } " HAVE_PTHREAD_SETSCHEDPARAM</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-    GR_ADD_COND_DEF(HAVE_PTHREAD_SETSCHEDPARAM)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    CHECK_CXX_SOURCE_COMPILES("</span><br><span style="color: hsl(0, 100%, 40%);">-        #include <sched.h></span><br><span style="color: hsl(0, 100%, 40%);">-        int main(){</span><br><span style="color: hsl(0, 100%, 40%);">-            pid_t pid;</span><br><span style="color: hsl(0, 100%, 40%);">-            sched_setscheduler(pid, 0, 0);</span><br><span style="color: hsl(0, 100%, 40%);">-            return 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        } " HAVE_SCHED_SETSCHEDULER</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-    GR_ADD_COND_DEF(HAVE_SCHED_SETSCHEDULER)</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_CHECK_LINUX_SCHED_AVAIL)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Macros to generate source and header files from template</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_EXPAND_X_H component root)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  include(GrPython)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-"#!${PYTHON_EXECUTABLE}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-import sys, os, re</span><br><span style="color: hsl(0, 100%, 40%);">-sys.path.append('${GR_RUNTIME_PYTHONPATH}')</span><br><span style="color: hsl(0, 100%, 40%);">-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'</span><br><span style="color: hsl(0, 100%, 40%);">-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if __name__ == '__main__':</span><br><span style="color: hsl(0, 100%, 40%);">-    import build_utils</span><br><span style="color: hsl(0, 100%, 40%);">-    root, inp = sys.argv[1:3]</span><br><span style="color: hsl(0, 100%, 40%);">-    for sig in sys.argv[3:]:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = re.sub ('X+', sig, root)</span><br><span style="color: hsl(0, 100%, 40%);">-        d = build_utils.standard_dict2(name, sig, '${component}')</span><br><span style="color: hsl(0, 100%, 40%);">-        build_utils.expand_template(d, inp)</span><br><span style="color: hsl(0, 100%, 40%);">-")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #make a list of all the generated headers</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(expanded_files_h)</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(sig ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-    string(REGEX REPLACE "X+" ${sig} name ${root})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach(sig)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(name)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #create a command to generate the headers</span><br><span style="color: hsl(0, 100%, 40%);">-  add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT ${expanded_files_h}</span><br><span style="color: hsl(0, 100%, 40%);">-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-    ${root} ${root}.h.t ${ARGN}</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #install rules for the generated headers</span><br><span style="color: hsl(0, 100%, 40%);">-  list(APPEND generated_includes ${expanded_files_h})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_EXPAND_X_H)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_EXPAND_X_CC_H component root)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  include(GrPython)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-"#!${PYTHON_EXECUTABLE}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-import sys, os, re</span><br><span style="color: hsl(0, 100%, 40%);">-sys.path.append('${GR_RUNTIME_PYTHONPATH}')</span><br><span style="color: hsl(0, 100%, 40%);">-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'</span><br><span style="color: hsl(0, 100%, 40%);">-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if __name__ == '__main__':</span><br><span style="color: hsl(0, 100%, 40%);">-    import build_utils</span><br><span style="color: hsl(0, 100%, 40%);">-    root, inp = sys.argv[1:3]</span><br><span style="color: hsl(0, 100%, 40%);">-    for sig in sys.argv[3:]:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = re.sub ('X+', sig, root)</span><br><span style="color: hsl(0, 100%, 40%);">-        d = build_utils.standard_impl_dict2(name, sig, '${component}')</span><br><span style="color: hsl(0, 100%, 40%);">-        build_utils.expand_template(d, inp)</span><br><span style="color: hsl(0, 100%, 40%);">-")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #make a list of all the generated files</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(expanded_files_cc)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(expanded_files_h)</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(sig ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-    string(REGEX REPLACE "X+" ${sig} name ${root})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND expanded_files_cc ${CMAKE_CURRENT_BINARY_DIR}/${name}.cc)</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND expanded_files_h  ${CMAKE_CURRENT_BINARY_DIR}/${name}.h)</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach(sig)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(name)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #create a command to generate the source files</span><br><span style="color: hsl(0, 100%, 40%);">-  add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT ${expanded_files_cc}</span><br><span style="color: hsl(0, 100%, 40%);">-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.cc.t</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-    ${root} ${root}.cc.t ${ARGN}</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #create a command to generate the header files</span><br><span style="color: hsl(0, 100%, 40%);">-  add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT ${expanded_files_h}</span><br><span style="color: hsl(0, 100%, 40%);">-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}.h.t</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-    ${root} ${root}.h.t ${ARGN}</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #make source files depends on headers to force generation</span><br><span style="color: hsl(0, 100%, 40%);">-  set_source_files_properties(${expanded_files_cc}</span><br><span style="color: hsl(0, 100%, 40%);">-    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #install rules for the generated files</span><br><span style="color: hsl(0, 100%, 40%);">-  list(APPEND generated_sources ${expanded_files_cc})</span><br><span style="color: hsl(0, 100%, 40%);">-  list(APPEND generated_headers ${expanded_files_h})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_EXPAND_X_CC_H)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_EXPAND_X_CC_H_IMPL component root)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  include(GrPython)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-"#!${PYTHON_EXECUTABLE}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-import sys, os, re</span><br><span style="color: hsl(0, 100%, 40%);">-sys.path.append('${GR_RUNTIME_PYTHONPATH}')</span><br><span style="color: hsl(0, 100%, 40%);">-os.environ['srcdir'] = '${CMAKE_CURRENT_SOURCE_DIR}'</span><br><span style="color: hsl(0, 100%, 40%);">-os.chdir('${CMAKE_CURRENT_BINARY_DIR}')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if __name__ == '__main__':</span><br><span style="color: hsl(0, 100%, 40%);">-    import build_utils</span><br><span style="color: hsl(0, 100%, 40%);">-    root, inp = sys.argv[1:3]</span><br><span style="color: hsl(0, 100%, 40%);">-    for sig in sys.argv[3:]:</span><br><span style="color: hsl(0, 100%, 40%);">-        name = re.sub ('X+', sig, root)</span><br><span style="color: hsl(0, 100%, 40%);">-        d = build_utils.standard_dict(name, sig, '${component}')</span><br><span style="color: hsl(0, 100%, 40%);">-        build_utils.expand_template(d, inp, '_impl')</span><br><span style="color: hsl(0, 100%, 40%);">-")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #make a list of all the generated files</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(expanded_files_cc_impl)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(expanded_files_h_impl)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(expanded_files_h)</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(sig ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-    string(REGEX REPLACE "X+" ${sig} name ${root})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND expanded_files_cc_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.cc)</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND expanded_files_h_impl ${CMAKE_CURRENT_BINARY_DIR}/${name}_impl.h)</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND expanded_files_h ${CMAKE_CURRENT_BINARY_DIR}/../include/gnuradio/${component}/${name}.h)</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach(sig)</span><br><span style="color: hsl(0, 100%, 40%);">-  unset(name)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #create a command to generate the _impl.cc files</span><br><span style="color: hsl(0, 100%, 40%);">-  add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT ${expanded_files_cc_impl}</span><br><span style="color: hsl(0, 100%, 40%);">-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.cc.t</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-    ${root} ${root}_impl.cc.t ${ARGN}</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #create a command to generate the _impl.h files</span><br><span style="color: hsl(0, 100%, 40%);">-  add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT ${expanded_files_h_impl}</span><br><span style="color: hsl(0, 100%, 40%);">-    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${root}_impl.h.t</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_CURRENT_BINARY_DIR}/generate_helper.py</span><br><span style="color: hsl(0, 100%, 40%);">-    ${root} ${root}_impl.h.t ${ARGN}</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #make _impl.cc source files depend on _impl.h to force generation</span><br><span style="color: hsl(0, 100%, 40%);">-  set_source_files_properties(${expanded_files_cc_impl}</span><br><span style="color: hsl(0, 100%, 40%);">-    PROPERTIES OBJECT_DEPENDS "${expanded_files_h_impl}"</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #make _impl.h source files depend on headers to force generation</span><br><span style="color: hsl(0, 100%, 40%);">-  set_source_files_properties(${expanded_files_h_impl}</span><br><span style="color: hsl(0, 100%, 40%);">-    PROPERTIES OBJECT_DEPENDS "${expanded_files_h}"</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #install rules for the generated files</span><br><span style="color: hsl(0, 100%, 40%);">-  list(APPEND generated_sources ${expanded_files_cc_impl})</span><br><span style="color: hsl(0, 100%, 40%);">-  list(APPEND generated_headers ${expanded_files_h_impl})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_EXPAND_X_CC_H_IMPL)</span><br><span>diff --git a/cmake/Modules/GrPlatform.cmake b/cmake/Modules/GrPlatform.cmake</span><br><span>deleted file mode 100644</span><br><span>index a2e4f3b..0000000</span><br><span>--- a/cmake/Modules/GrPlatform.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,46 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2011 Free Software Foundation, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">-# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation; either version 3, or (at your option)</span><br><span style="color: hsl(0, 100%, 40%);">-# any later version.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">-# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">-# along with GNU Radio; see the file COPYING.  If not, write to</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span style="color: hsl(0, 100%, 40%);">-# Boston, MA 02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(DEFINED __INCLUDED_GR_PLATFORM_CMAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-    return()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(__INCLUDED_GR_PLATFORM_CMAKE TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Setup additional defines for OS types</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(LINUX TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(LINUX AND EXISTS "/etc/debian_version")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(DEBIAN TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(LINUX AND EXISTS "/etc/redhat-release")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(REDHAT TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# when the library suffix should be 64 (applies to redhat linux family)</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-if(NOT DEFINED LIB_SUFFIX AND REDHAT AND CMAKE_SYSTEM_PROCESSOR MATCHES "64$")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(LIB_SUFFIX 64)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(LIB_SUFFIX ${LIB_SUFFIX} CACHE STRING "lib directory suffix")</span><br><span>diff --git a/cmake/Modules/GrPython.cmake b/cmake/Modules/GrPython.cmake</span><br><span>deleted file mode 100644</span><br><span>index 68ca58e..0000000</span><br><span>--- a/cmake/Modules/GrPython.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,227 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2010-2011 Free Software Foundation, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">-# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation; either version 3, or (at your option)</span><br><span style="color: hsl(0, 100%, 40%);">-# any later version.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">-# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">-# along with GNU Radio; see the file COPYING.  If not, write to</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span style="color: hsl(0, 100%, 40%);">-# Boston, MA 02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(DEFINED __INCLUDED_GR_PYTHON_CMAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-    return()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(__INCLUDED_GR_PYTHON_CMAKE TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Setup the python interpreter:</span><br><span style="color: hsl(0, 100%, 40%);">-# This allows the user to specify a specific interpreter,</span><br><span style="color: hsl(0, 100%, 40%);">-# or finds the interpreter via the built-in cmake module.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-#this allows the user to override PYTHON_EXECUTABLE</span><br><span style="color: hsl(0, 100%, 40%);">-if(PYTHON_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    set(PYTHONINTERP_FOUND TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#otherwise if not set, try to automatically find it</span><br><span style="color: hsl(0, 100%, 40%);">-else(PYTHON_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #use the built-in find script</span><br><span style="color: hsl(0, 100%, 40%);">-    find_package(PythonInterp 2)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #and if that fails use the find program routine</span><br><span style="color: hsl(0, 100%, 40%);">-    if(NOT PYTHONINTERP_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-        find_program(PYTHON_EXECUTABLE NAMES python python2 python2.7 python2.6 python2.5)</span><br><span style="color: hsl(0, 100%, 40%);">-        if(PYTHON_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-            set(PYTHONINTERP_FOUND TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-        endif(PYTHON_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(NOT PYTHONINTERP_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endif(PYTHON_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#make the path to the executable appear in the cmake gui</span><br><span style="color: hsl(0, 100%, 40%);">-set(PYTHON_EXECUTABLE ${PYTHON_EXECUTABLE} CACHE FILEPATH "python interpreter")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#make sure we can use -B with python (introduced in 2.6)</span><br><span style="color: hsl(0, 100%, 40%);">-if(PYTHON_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-    execute_process(</span><br><span style="color: hsl(0, 100%, 40%);">-        COMMAND ${PYTHON_EXECUTABLE} -B -c ""</span><br><span style="color: hsl(0, 100%, 40%);">-        OUTPUT_QUIET ERROR_QUIET</span><br><span style="color: hsl(0, 100%, 40%);">-        RESULT_VARIABLE PYTHON_HAS_DASH_B_RESULT</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-    if(PYTHON_HAS_DASH_B_RESULT EQUAL 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(PYTHON_DASH_B "-B")</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-endif(PYTHON_EXECUTABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Check for the existence of a python module:</span><br><span style="color: hsl(0, 100%, 40%);">-# - desc a string description of the check</span><br><span style="color: hsl(0, 100%, 40%);">-# - mod the name of the module to import</span><br><span style="color: hsl(0, 100%, 40%);">-# - cmd an additional command to run</span><br><span style="color: hsl(0, 100%, 40%);">-# - have the result variable to set</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_PYTHON_CHECK_MODULE desc mod cmd have)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "")</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "Python checking for ${desc}")</span><br><span style="color: hsl(0, 100%, 40%);">-    execute_process(</span><br><span style="color: hsl(0, 100%, 40%);">-        COMMAND ${PYTHON_EXECUTABLE} -c "</span><br><span style="color: hsl(0, 100%, 40%);">-#########################################</span><br><span style="color: hsl(0, 100%, 40%);">-try: import ${mod}</span><br><span style="color: hsl(0, 100%, 40%);">-except: exit(-1)</span><br><span style="color: hsl(0, 100%, 40%);">-try: assert ${cmd}</span><br><span style="color: hsl(0, 100%, 40%);">-except: exit(-1)</span><br><span style="color: hsl(0, 100%, 40%);">-#########################################"</span><br><span style="color: hsl(0, 100%, 40%);">-        RESULT_VARIABLE ${have}</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-    if(${have} EQUAL 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        message(STATUS "Python checking for ${desc} - found")</span><br><span style="color: hsl(0, 100%, 40%);">-        set(${have} TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-    else(${have} EQUAL 0)</span><br><span style="color: hsl(0, 100%, 40%);">-        message(STATUS "Python checking for ${desc} - not found")</span><br><span style="color: hsl(0, 100%, 40%);">-        set(${have} FALSE)</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(${have} EQUAL 0)</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_PYTHON_CHECK_MODULE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Sets the python installation directory GR_PYTHON_DIR</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "</span><br><span style="color: hsl(0, 100%, 40%);">-from distutils import sysconfig</span><br><span style="color: hsl(0, 100%, 40%);">-print sysconfig.get_python_lib(plat_specific=True, prefix='')</span><br><span style="color: hsl(0, 100%, 40%);">-" OUTPUT_VARIABLE GR_PYTHON_DIR OUTPUT_STRIP_TRAILING_WHITESPACE</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-file(TO_CMAKE_PATH ${GR_PYTHON_DIR} GR_PYTHON_DIR)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Create an always-built target with a unique name</span><br><span style="color: hsl(0, 100%, 40%);">-# Usage: GR_UNIQUE_TARGET(<description> <dependencies list>)</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_UNIQUE_TARGET desc)</span><br><span style="color: hsl(0, 100%, 40%);">-    file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-    execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib</span><br><span style="color: hsl(0, 100%, 40%);">-unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]</span><br><span style="color: hsl(0, 100%, 40%);">-print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))"</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE)</span><br><span style="color: hsl(0, 100%, 40%);">-    add_custom_target(${_target} ALL DEPENDS ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_UNIQUE_TARGET)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Install python sources (also builds and installs byte-compiled python)</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_PYTHON_INSTALL)</span><br><span style="color: hsl(0, 100%, 40%);">-    include(CMakeParseArgumentsCopy)</span><br><span style="color: hsl(0, 100%, 40%);">-    CMAKE_PARSE_ARGUMENTS(GR_PYTHON_INSTALL "" "DESTINATION;COMPONENT" "FILES;PROGRAMS" ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    ####################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-    if(GR_PYTHON_INSTALL_FILES)</span><br><span style="color: hsl(0, 100%, 40%);">-    ####################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-        install(${ARGN}) #installs regular python files</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #create a list of all generated files</span><br><span style="color: hsl(0, 100%, 40%);">-        unset(pysrcfiles)</span><br><span style="color: hsl(0, 100%, 40%);">-        unset(pycfiles)</span><br><span style="color: hsl(0, 100%, 40%);">-        unset(pyofiles)</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(pyfile ${GR_PYTHON_INSTALL_FILES})</span><br><span style="color: hsl(0, 100%, 40%);">-            get_filename_component(pyfile ${pyfile} ABSOLUTE)</span><br><span style="color: hsl(0, 100%, 40%);">-            list(APPEND pysrcfiles ${pyfile})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            #determine if this file is in the source or binary directory</span><br><span style="color: hsl(0, 100%, 40%);">-            file(RELATIVE_PATH source_rel_path ${CMAKE_CURRENT_SOURCE_DIR} ${pyfile})</span><br><span style="color: hsl(0, 100%, 40%);">-            string(LENGTH "${source_rel_path}" source_rel_path_len)</span><br><span style="color: hsl(0, 100%, 40%);">-            file(RELATIVE_PATH binary_rel_path ${CMAKE_CURRENT_BINARY_DIR} ${pyfile})</span><br><span style="color: hsl(0, 100%, 40%);">-            string(LENGTH "${binary_rel_path}" binary_rel_path_len)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            #and set the generated path appropriately</span><br><span style="color: hsl(0, 100%, 40%);">-            if(${source_rel_path_len} GREATER ${binary_rel_path_len})</span><br><span style="color: hsl(0, 100%, 40%);">-                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${binary_rel_path})</span><br><span style="color: hsl(0, 100%, 40%);">-            else()</span><br><span style="color: hsl(0, 100%, 40%);">-                set(pygenfile ${CMAKE_CURRENT_BINARY_DIR}/${source_rel_path})</span><br><span style="color: hsl(0, 100%, 40%);">-            endif()</span><br><span style="color: hsl(0, 100%, 40%);">-            list(APPEND pycfiles ${pygenfile}c)</span><br><span style="color: hsl(0, 100%, 40%);">-            list(APPEND pyofiles ${pygenfile}o)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            #ensure generation path exists</span><br><span style="color: hsl(0, 100%, 40%);">-            get_filename_component(pygen_path ${pygenfile} PATH)</span><br><span style="color: hsl(0, 100%, 40%);">-            file(MAKE_DIRECTORY ${pygen_path})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(pyfile)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #the command to generate the pyc files</span><br><span style="color: hsl(0, 100%, 40%);">-        add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-            DEPENDS ${pysrcfiles} OUTPUT ${pycfiles}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pycfiles}</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #the command to generate the pyo files</span><br><span style="color: hsl(0, 100%, 40%);">-        add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-            DEPENDS ${pysrcfiles} OUTPUT ${pyofiles}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND ${PYTHON_EXECUTABLE} -O ${CMAKE_BINARY_DIR}/python_compile_helper.py ${pysrcfiles} ${pyofiles}</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #create install rule and add generated files to target list</span><br><span style="color: hsl(0, 100%, 40%);">-        set(python_install_gen_targets ${pycfiles} ${pyofiles})</span><br><span style="color: hsl(0, 100%, 40%);">-        install(FILES ${python_install_gen_targets}</span><br><span style="color: hsl(0, 100%, 40%);">-            DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    ####################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-    elseif(GR_PYTHON_INSTALL_PROGRAMS)</span><br><span style="color: hsl(0, 100%, 40%);">-    ####################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-        file(TO_NATIVE_PATH ${PYTHON_EXECUTABLE} pyexe_native)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(pyfile ${GR_PYTHON_INSTALL_PROGRAMS})</span><br><span style="color: hsl(0, 100%, 40%);">-            get_filename_component(pyfile_name ${pyfile} NAME)</span><br><span style="color: hsl(0, 100%, 40%);">-            get_filename_component(pyfile ${pyfile} ABSOLUTE)</span><br><span style="color: hsl(0, 100%, 40%);">-            string(REPLACE "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" pyexefile "${pyfile}.exe")</span><br><span style="color: hsl(0, 100%, 40%);">-            list(APPEND python_install_gen_targets ${pyexefile})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            get_filename_component(pyexefile_path ${pyexefile} PATH)</span><br><span style="color: hsl(0, 100%, 40%);">-            file(MAKE_DIRECTORY ${pyexefile_path})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-                OUTPUT ${pyexefile} DEPENDS ${pyfile}</span><br><span style="color: hsl(0, 100%, 40%);">-                COMMAND ${PYTHON_EXECUTABLE} -c</span><br><span style="color: hsl(0, 100%, 40%);">-                \"open('${pyexefile}', 'w').write('\#!${pyexe_native}\\n'+open('${pyfile}').read())\"</span><br><span style="color: hsl(0, 100%, 40%);">-                COMMENT "Shebangin ${pyfile_name}"</span><br><span style="color: hsl(0, 100%, 40%);">-            )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            #on windows, python files need an extension to execute</span><br><span style="color: hsl(0, 100%, 40%);">-            get_filename_component(pyfile_ext ${pyfile} EXT)</span><br><span style="color: hsl(0, 100%, 40%);">-            if(WIN32 AND NOT pyfile_ext)</span><br><span style="color: hsl(0, 100%, 40%);">-                set(pyfile_name "${pyfile_name}.py")</span><br><span style="color: hsl(0, 100%, 40%);">-            endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-            install(PROGRAMS ${pyexefile} RENAME ${pyfile_name}</span><br><span style="color: hsl(0, 100%, 40%);">-                DESTINATION ${GR_PYTHON_INSTALL_DESTINATION}</span><br><span style="color: hsl(0, 100%, 40%);">-                COMPONENT ${GR_PYTHON_INSTALL_COMPONENT}</span><br><span style="color: hsl(0, 100%, 40%);">-            )</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(pyfile)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    GR_UNIQUE_TARGET("pygen" ${python_install_gen_targets})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_PYTHON_INSTALL)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Write the python helper script that generates byte code files</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-file(WRITE ${CMAKE_BINARY_DIR}/python_compile_helper.py "</span><br><span style="color: hsl(0, 100%, 40%);">-import sys, py_compile</span><br><span style="color: hsl(0, 100%, 40%);">-files = sys.argv[1:]</span><br><span style="color: hsl(0, 100%, 40%);">-srcs, gens = files[:len(files)/2], files[len(files)/2:]</span><br><span style="color: hsl(0, 100%, 40%);">-for src, gen in zip(srcs, gens):</span><br><span style="color: hsl(0, 100%, 40%);">-    py_compile.compile(file=src, cfile=gen, doraise=True)</span><br><span style="color: hsl(0, 100%, 40%);">-")</span><br><span>diff --git a/cmake/Modules/GrSwig.cmake b/cmake/Modules/GrSwig.cmake</span><br><span>deleted file mode 100644</span><br><span>index 569667b..0000000</span><br><span>--- a/cmake/Modules/GrSwig.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,229 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2010-2011 Free Software Foundation, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">-# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation; either version 3, or (at your option)</span><br><span style="color: hsl(0, 100%, 40%);">-# any later version.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">-# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">-# along with GNU Radio; see the file COPYING.  If not, write to</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span style="color: hsl(0, 100%, 40%);">-# Boston, MA 02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(DEFINED __INCLUDED_GR_SWIG_CMAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-    return()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(__INCLUDED_GR_SWIG_CMAKE TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-include(GrPython)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Builds a swig documentation file to be generated into python docstrings</span><br><span style="color: hsl(0, 100%, 40%);">-# Usage: GR_SWIG_MAKE_DOCS(output_file input_path input_path....)</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Set the following variable to specify extra dependent targets:</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_DOCS_SOURCE_DEPS</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_DOCS_TARGET_DEPS</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_SWIG_MAKE_DOCS output_file)</span><br><span style="color: hsl(0, 100%, 40%);">-    find_package(Doxygen)</span><br><span style="color: hsl(0, 100%, 40%);">-    if(DOXYGEN_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #setup the input files variable list, quote formated</span><br><span style="color: hsl(0, 100%, 40%);">-        set(input_files)</span><br><span style="color: hsl(0, 100%, 40%);">-        unset(INPUT_PATHS)</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(input_path ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-            if (IS_DIRECTORY ${input_path}) #when input path is a directory</span><br><span style="color: hsl(0, 100%, 40%);">-                file(GLOB input_path_h_files ${input_path}/*.h)</span><br><span style="color: hsl(0, 100%, 40%);">-            else() #otherwise its just a file, no glob</span><br><span style="color: hsl(0, 100%, 40%);">-                set(input_path_h_files ${input_path})</span><br><span style="color: hsl(0, 100%, 40%);">-            endif()</span><br><span style="color: hsl(0, 100%, 40%);">-            list(APPEND input_files ${input_path_h_files})</span><br><span style="color: hsl(0, 100%, 40%);">-            set(INPUT_PATHS "${INPUT_PATHS} \"${input_path}\"")</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(input_path)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #determine the output directory</span><br><span style="color: hsl(0, 100%, 40%);">-        get_filename_component(name ${output_file} NAME_WE)</span><br><span style="color: hsl(0, 100%, 40%);">-        get_filename_component(OUTPUT_DIRECTORY ${output_file} PATH)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}/${name}_swig_docs)</span><br><span style="color: hsl(0, 100%, 40%);">-        make_directory(${OUTPUT_DIRECTORY})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #generate the Doxyfile used by doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-        configure_file(</span><br><span style="color: hsl(0, 100%, 40%);">-            ${CMAKE_SOURCE_DIR}/docs/doxygen/Doxyfile.swig_doc.in</span><br><span style="color: hsl(0, 100%, 40%);">-            ${OUTPUT_DIRECTORY}/Doxyfile</span><br><span style="color: hsl(0, 100%, 40%);">-        @ONLY)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #Create a dummy custom command that depends on other targets</span><br><span style="color: hsl(0, 100%, 40%);">-        include(GrMiscUtils)</span><br><span style="color: hsl(0, 100%, 40%);">-        GR_GEN_TARGET_DEPS(_${name}_tag tag_deps ${GR_SWIG_DOCS_TARGET_DEPS})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #call doxygen on the Doxyfile + input headers</span><br><span style="color: hsl(0, 100%, 40%);">-        add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-            OUTPUT ${OUTPUT_DIRECTORY}/xml/index.xml</span><br><span style="color: hsl(0, 100%, 40%);">-            DEPENDS ${input_files} ${GR_SWIG_DOCS_SOURCE_DEPS} ${tag_deps}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND ${DOXYGEN_EXECUTABLE} ${OUTPUT_DIRECTORY}/Doxyfile</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMENT "Generating doxygen xml for ${name} docs"</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #call the swig_doc script on the xml files</span><br><span style="color: hsl(0, 100%, 40%);">-        add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-            OUTPUT ${output_file}</span><br><span style="color: hsl(0, 100%, 40%);">-            DEPENDS ${input_files} ${OUTPUT_DIRECTORY}/xml/index.xml</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B}</span><br><span style="color: hsl(0, 100%, 40%);">-                ${CMAKE_SOURCE_DIR}/docs/doxygen/swig_doc.py</span><br><span style="color: hsl(0, 100%, 40%);">-                ${OUTPUT_DIRECTORY}/xml</span><br><span style="color: hsl(0, 100%, 40%);">-                ${output_file}</span><br><span style="color: hsl(0, 100%, 40%);">-            WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docs/doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    else(DOXYGEN_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-        file(WRITE ${output_file} "\n") #no doxygen -> empty file</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(DOXYGEN_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_SWIG_MAKE_DOCS)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Build a swig target for the common gnuradio use case. Usage:</span><br><span style="color: hsl(0, 100%, 40%);">-# GR_SWIG_MAKE(target ifile ifile ifile...)</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Set the following variables before calling:</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_FLAGS</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_INCLUDE_DIRS</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_LIBRARIES</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_SOURCE_DEPS</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_TARGET_DEPS</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_DOC_FILE</span><br><span style="color: hsl(0, 100%, 40%);">-#   - GR_SWIG_DOC_DIRS</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_SWIG_MAKE name)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(ifiles ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #do swig doc generation if specified</span><br><span style="color: hsl(0, 100%, 40%);">-    if (GR_SWIG_DOC_FILE)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(GR_SWIG_DOCS_SOURCE_DEPS ${GR_SWIG_SOURCE_DEPS})</span><br><span style="color: hsl(0, 100%, 40%);">-        set(GR_SWIG_DOCS_TAREGT_DEPS ${GR_SWIG_TARGET_DEPS})</span><br><span style="color: hsl(0, 100%, 40%);">-        GR_SWIG_MAKE_DOCS(${GR_SWIG_DOC_FILE} ${GR_SWIG_DOC_DIRS})</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND GR_SWIG_SOURCE_DEPS ${GR_SWIG_DOC_FILE})</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #append additional include directories</span><br><span style="color: hsl(0, 100%, 40%);">-    find_package(PythonLibs 2)</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_PATH}) #deprecated name (now dirs)</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND GR_SWIG_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND GR_SWIG_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #determine include dependencies for swig file</span><br><span style="color: hsl(0, 100%, 40%);">-    execute_process(</span><br><span style="color: hsl(0, 100%, 40%);">-        COMMAND ${PYTHON_EXECUTABLE}</span><br><span style="color: hsl(0, 100%, 40%);">-            ${CMAKE_BINARY_DIR}/get_swig_deps.py</span><br><span style="color: hsl(0, 100%, 40%);">-            "${ifiles}" "${GR_SWIG_INCLUDE_DIRS}"</span><br><span style="color: hsl(0, 100%, 40%);">-        OUTPUT_STRIP_TRAILING_WHITESPACE</span><br><span style="color: hsl(0, 100%, 40%);">-        OUTPUT_VARIABLE SWIG_MODULE_${name}_EXTRA_DEPS</span><br><span style="color: hsl(0, 100%, 40%);">-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #Create a dummy custom command that depends on other targets</span><br><span style="color: hsl(0, 100%, 40%);">-    include(GrMiscUtils)</span><br><span style="color: hsl(0, 100%, 40%);">-    GR_GEN_TARGET_DEPS(_${name}_swig_tag tag_deps ${GR_SWIG_TARGET_DEPS})</span><br><span style="color: hsl(0, 100%, 40%);">-    set(tag_file ${CMAKE_CURRENT_BINARY_DIR}/${name}.tag)</span><br><span style="color: hsl(0, 100%, 40%);">-    add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-        OUTPUT ${tag_file}</span><br><span style="color: hsl(0, 100%, 40%);">-        DEPENDS ${GR_SWIG_SOURCE_DEPS} ${tag_deps}</span><br><span style="color: hsl(0, 100%, 40%);">-        COMMAND ${CMAKE_COMMAND} -E touch ${tag_file}</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #append the specified include directories</span><br><span style="color: hsl(0, 100%, 40%);">-    include_directories(${GR_SWIG_INCLUDE_DIRS})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND SWIG_MODULE_${name}_EXTRA_DEPS ${tag_file})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #setup the swig flags with flags and include directories</span><br><span style="color: hsl(0, 100%, 40%);">-    set(CMAKE_SWIG_FLAGS -fvirtual -modern -keyword -w511 -module ${name} ${GR_SWIG_FLAGS})</span><br><span style="color: hsl(0, 100%, 40%);">-    foreach(dir ${GR_SWIG_INCLUDE_DIRS})</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND CMAKE_SWIG_FLAGS "-I${dir}")</span><br><span style="color: hsl(0, 100%, 40%);">-    endforeach(dir)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #set the C++ property on the swig .i file so it builds</span><br><span style="color: hsl(0, 100%, 40%);">-    set_source_files_properties(${ifiles} PROPERTIES CPLUSPLUS ON)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #setup the actual swig library target to be built</span><br><span style="color: hsl(0, 100%, 40%);">-    include(UseSWIG)</span><br><span style="color: hsl(0, 100%, 40%);">-    SWIG_ADD_MODULE(${name} python ${ifiles})</span><br><span style="color: hsl(0, 100%, 40%);">-    SWIG_LINK_LIBRARIES(${name} ${PYTHON_LIBRARIES} ${GR_SWIG_LIBRARIES})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_SWIG_MAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Install swig targets generated by GR_SWIG_MAKE. Usage:</span><br><span style="color: hsl(0, 100%, 40%);">-# GR_SWIG_INSTALL(</span><br><span style="color: hsl(0, 100%, 40%);">-#   TARGETS target target target...</span><br><span style="color: hsl(0, 100%, 40%);">-#   [DESTINATION destination]</span><br><span style="color: hsl(0, 100%, 40%);">-#   [COMPONENT component]</span><br><span style="color: hsl(0, 100%, 40%);">-# )</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-macro(GR_SWIG_INSTALL)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    include(CMakeParseArgumentsCopy)</span><br><span style="color: hsl(0, 100%, 40%);">-    CMAKE_PARSE_ARGUMENTS(GR_SWIG_INSTALL "" "DESTINATION;COMPONENT" "TARGETS" ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    foreach(name ${GR_SWIG_INSTALL_TARGETS})</span><br><span style="color: hsl(0, 100%, 40%);">-        install(TARGETS ${SWIG_MODULE_${name}_REAL_NAME}</span><br><span style="color: hsl(0, 100%, 40%);">-            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        include(GrPython)</span><br><span style="color: hsl(0, 100%, 40%);">-        GR_PYTHON_INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.py</span><br><span style="color: hsl(0, 100%, 40%);">-            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMPONENT ${GR_SWIG_INSTALL_COMPONENT}</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        GR_LIBTOOL(</span><br><span style="color: hsl(0, 100%, 40%);">-            TARGET ${SWIG_MODULE_${name}_REAL_NAME}</span><br><span style="color: hsl(0, 100%, 40%);">-            DESTINATION ${GR_SWIG_INSTALL_DESTINATION}</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    endforeach(name)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro(GR_SWIG_INSTALL)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Generate a python file that can determine swig dependencies.</span><br><span style="color: hsl(0, 100%, 40%);">-# Used by the make macro above to determine extra dependencies.</span><br><span style="color: hsl(0, 100%, 40%);">-# When you build C++, CMake figures out the header dependencies.</span><br><span style="color: hsl(0, 100%, 40%);">-# This code essentially performs that logic for swig includes.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-file(WRITE ${CMAKE_BINARY_DIR}/get_swig_deps.py "</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-import os, sys, re</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-include_matcher = re.compile('[#|%]include\\s*[<|\"](.*)[>|\"]')</span><br><span style="color: hsl(0, 100%, 40%);">-include_dirs = sys.argv[2].split(';')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-def get_swig_incs(file_path):</span><br><span style="color: hsl(0, 100%, 40%);">-    file_contents = open(file_path, 'r').read()</span><br><span style="color: hsl(0, 100%, 40%);">-    return include_matcher.findall(file_contents, re.MULTILINE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-def get_swig_deps(file_path, level):</span><br><span style="color: hsl(0, 100%, 40%);">-    deps = [file_path]</span><br><span style="color: hsl(0, 100%, 40%);">-    if level == 0: return deps</span><br><span style="color: hsl(0, 100%, 40%);">-    for inc_file in get_swig_incs(file_path):</span><br><span style="color: hsl(0, 100%, 40%);">-        for inc_dir in include_dirs:</span><br><span style="color: hsl(0, 100%, 40%);">-            inc_path = os.path.join(inc_dir, inc_file)</span><br><span style="color: hsl(0, 100%, 40%);">-            if not os.path.exists(inc_path): continue</span><br><span style="color: hsl(0, 100%, 40%);">-            deps.extend(get_swig_deps(inc_path, level-1))</span><br><span style="color: hsl(0, 100%, 40%);">-    return deps</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if __name__ == '__main__':</span><br><span style="color: hsl(0, 100%, 40%);">-    ifiles = sys.argv[1].split(';')</span><br><span style="color: hsl(0, 100%, 40%);">-    deps = sum([get_swig_deps(ifile, 3) for ifile in ifiles], [])</span><br><span style="color: hsl(0, 100%, 40%);">-    #sys.stderr.write(';'.join(set(deps)) + '\\n\\n')</span><br><span style="color: hsl(0, 100%, 40%);">-    print(';'.join(set(deps)))</span><br><span style="color: hsl(0, 100%, 40%);">-")</span><br><span>diff --git a/cmake/Modules/GrTest.cmake b/cmake/Modules/GrTest.cmake</span><br><span>deleted file mode 100644</span><br><span>index 6174c03..0000000</span><br><span>--- a/cmake/Modules/GrTest.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,133 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2010-2011 Free Software Foundation, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">-# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation; either version 3, or (at your option)</span><br><span style="color: hsl(0, 100%, 40%);">-# any later version.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">-# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">-# along with GNU Radio; see the file COPYING.  If not, write to</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span style="color: hsl(0, 100%, 40%);">-# Boston, MA 02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(DEFINED __INCLUDED_GR_TEST_CMAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-    return()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(__INCLUDED_GR_TEST_CMAKE TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Add a unit test and setup the environment for a unit test.</span><br><span style="color: hsl(0, 100%, 40%);">-# Takes the same arguments as the ADD_TEST function.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Before calling set the following variables:</span><br><span style="color: hsl(0, 100%, 40%);">-# GR_TEST_TARGET_DEPS  - built targets for the library path</span><br><span style="color: hsl(0, 100%, 40%);">-# GR_TEST_LIBRARY_DIRS - directories for the library path</span><br><span style="color: hsl(0, 100%, 40%);">-# GR_TEST_PYTHON_DIRS  - directories for the python path</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-function(GR_ADD_TEST test_name)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if(WIN32)</span><br><span style="color: hsl(0, 100%, 40%);">-        #Ensure that the build exe also appears in the PATH.</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND GR_TEST_TARGET_DEPS ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #In the land of windows, all libraries must be in the PATH.</span><br><span style="color: hsl(0, 100%, 40%);">-        #Since the dependent libraries are not yet installed,</span><br><span style="color: hsl(0, 100%, 40%);">-        #we must manually set them in the PATH to run tests.</span><br><span style="color: hsl(0, 100%, 40%);">-        #The following appends the path of a target dependency.</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(target ${GR_TEST_TARGET_DEPS})</span><br><span style="color: hsl(0, 100%, 40%);">-            get_target_property(location ${target} LOCATION)</span><br><span style="color: hsl(0, 100%, 40%);">-            if(location)</span><br><span style="color: hsl(0, 100%, 40%);">-                get_filename_component(path ${location} PATH)</span><br><span style="color: hsl(0, 100%, 40%);">-                string(REGEX REPLACE "\\$\\(.*\\)" ${CMAKE_BUILD_TYPE} path ${path})</span><br><span style="color: hsl(0, 100%, 40%);">-                list(APPEND GR_TEST_LIBRARY_DIRS ${path})</span><br><span style="color: hsl(0, 100%, 40%);">-            endif(location)</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(target)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #SWIG generates the python library files into a subdirectory.</span><br><span style="color: hsl(0, 100%, 40%);">-        #Therefore, we must append this subdirectory into PYTHONPATH.</span><br><span style="color: hsl(0, 100%, 40%);">-        #Only do this for the python directories matching the following:</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(pydir ${GR_TEST_PYTHON_DIRS})</span><br><span style="color: hsl(0, 100%, 40%);">-            get_filename_component(name ${pydir} NAME)</span><br><span style="color: hsl(0, 100%, 40%);">-            if(name MATCHES "^(swig|lib|src)$")</span><br><span style="color: hsl(0, 100%, 40%);">-                list(APPEND GR_TEST_PYTHON_DIRS ${pydir}/${CMAKE_BUILD_TYPE})</span><br><span style="color: hsl(0, 100%, 40%);">-            endif()</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(pydir)</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(WIN32)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} srcdir)</span><br><span style="color: hsl(0, 100%, 40%);">-    file(TO_NATIVE_PATH "${GR_TEST_LIBRARY_DIRS}" libpath) #ok to use on dir list?</span><br><span style="color: hsl(0, 100%, 40%);">-    file(TO_NATIVE_PATH "${GR_TEST_PYTHON_DIRS}" pypath) #ok to use on dir list?</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    set(environs "GR_DONT_LOAD_PREFS=1" "srcdir=${srcdir}")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    #http://www.cmake.org/pipermail/cmake/2009-May/029464.html</span><br><span style="color: hsl(0, 100%, 40%);">-    #Replaced this add test + set environs code with the shell script generation.</span><br><span style="color: hsl(0, 100%, 40%);">-    #Its nicer to be able to manually run the shell script to diagnose problems.</span><br><span style="color: hsl(0, 100%, 40%);">-    #ADD_TEST(${ARGV})</span><br><span style="color: hsl(0, 100%, 40%);">-    #SET_TESTS_PROPERTIES(${test_name} PROPERTIES ENVIRONMENT "${environs}")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if(UNIX)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(binpath "${CMAKE_CURRENT_BINARY_DIR}:$PATH")</span><br><span style="color: hsl(0, 100%, 40%);">-        #set both LD and DYLD paths to cover multiple UNIX OS library paths</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND libpath "$LD_LIBRARY_PATH" "$DYLD_LIBRARY_PATH")</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND pypath "$PYTHONPATH")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #replace list separator with the path separator</span><br><span style="color: hsl(0, 100%, 40%);">-        string(REPLACE ";" ":" libpath "${libpath}")</span><br><span style="color: hsl(0, 100%, 40%);">-        string(REPLACE ";" ":" pypath "${pypath}")</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND environs "PATH=${binpath}" "LD_LIBRARY_PATH=${libpath}" "DYLD_LIBRARY_PATH=${libpath}" "PYTHONPATH=${pypath}")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #generate a bat file that sets the environment and runs the test</span><br><span style="color: hsl(0, 100%, 40%);">-        find_program(SHELL sh)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(sh_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.sh)</span><br><span style="color: hsl(0, 100%, 40%);">-        file(WRITE ${sh_file} "#!${SHELL}\n")</span><br><span style="color: hsl(0, 100%, 40%);">-        #each line sets an environment variable</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(environ ${environs})</span><br><span style="color: hsl(0, 100%, 40%);">-            file(APPEND ${sh_file} "export ${environ}\n")</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(environ)</span><br><span style="color: hsl(0, 100%, 40%);">-        #load the command to run with its arguments</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(arg ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-            file(APPEND ${sh_file} "${arg} ")</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(arg)</span><br><span style="color: hsl(0, 100%, 40%);">-        file(APPEND ${sh_file} "\n")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #make the shell file executable</span><br><span style="color: hsl(0, 100%, 40%);">-        execute_process(COMMAND chmod +x ${sh_file})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        add_test(${test_name} ${SHELL} ${sh_file})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(UNIX)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if(WIN32)</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND libpath ${DLL_PATHS} "%PATH%")</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND pypath "%PYTHONPATH%")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #replace list separator with the path separator (escaped)</span><br><span style="color: hsl(0, 100%, 40%);">-        string(REPLACE ";" "\\;" libpath "${libpath}")</span><br><span style="color: hsl(0, 100%, 40%);">-        string(REPLACE ";" "\\;" pypath "${pypath}")</span><br><span style="color: hsl(0, 100%, 40%);">-        list(APPEND environs "PATH=${libpath}" "PYTHONPATH=${pypath}")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        #generate a bat file that sets the environment and runs the test</span><br><span style="color: hsl(0, 100%, 40%);">-        set(bat_file ${CMAKE_CURRENT_BINARY_DIR}/${test_name}_test.bat)</span><br><span style="color: hsl(0, 100%, 40%);">-        file(WRITE ${bat_file} "@echo off\n")</span><br><span style="color: hsl(0, 100%, 40%);">-        #each line sets an environment variable</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(environ ${environs})</span><br><span style="color: hsl(0, 100%, 40%);">-            file(APPEND ${bat_file} "SET ${environ}\n")</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(environ)</span><br><span style="color: hsl(0, 100%, 40%);">-        #load the command to run with its arguments</span><br><span style="color: hsl(0, 100%, 40%);">-        foreach(arg ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-            file(APPEND ${bat_file} "${arg} ")</span><br><span style="color: hsl(0, 100%, 40%);">-        endforeach(arg)</span><br><span style="color: hsl(0, 100%, 40%);">-        file(APPEND ${bat_file} "\n")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        add_test(${test_name} ${bat_file})</span><br><span style="color: hsl(0, 100%, 40%);">-    endif(WIN32)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endfunction(GR_ADD_TEST)</span><br><span>diff --git a/cmake/Modules/GrVersion.cmake b/cmake/Modules/GrVersion.cmake</span><br><span>deleted file mode 100644</span><br><span>index bafd0a7..0000000</span><br><span>--- a/cmake/Modules/GrVersion.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,82 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2011,2013 Free Software Foundation, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(0, 100%, 40%);">-# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation; either version 3, or (at your option)</span><br><span style="color: hsl(0, 100%, 40%);">-# any later version.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU Radio is distributed in the hope that it will be useful,</span><br><span style="color: hsl(0, 100%, 40%);">-# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(0, 100%, 40%);">-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(0, 100%, 40%);">-# GNU General Public License for more details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(0, 100%, 40%);">-# along with GNU Radio; see the file COPYING.  If not, write to</span><br><span style="color: hsl(0, 100%, 40%);">-# the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span style="color: hsl(0, 100%, 40%);">-# Boston, MA 02110-1301, USA.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(DEFINED __INCLUDED_GR_VERSION_CMAKE)</span><br><span style="color: hsl(0, 100%, 40%);">-    return()</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-set(__INCLUDED_GR_VERSION_CMAKE TRUE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#eventually, replace version.sh and fill in the variables below</span><br><span style="color: hsl(0, 100%, 40%);">-set(MAJOR_VERSION ${VERSION_INFO_MAJOR_VERSION})</span><br><span style="color: hsl(0, 100%, 40%);">-set(API_COMPAT    ${VERSION_INFO_API_COMPAT})</span><br><span style="color: hsl(0, 100%, 40%);">-set(MINOR_VERSION ${VERSION_INFO_MINOR_VERSION})</span><br><span style="color: hsl(0, 100%, 40%);">-set(MAINT_VERSION ${VERSION_INFO_MAINT_VERSION})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Extract the version string from git describe.</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(Git)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-if(GIT_FOUND AND EXISTS ${CMAKE_SOURCE_DIR}/.git)</span><br><span style="color: hsl(0, 100%, 40%);">-    message(STATUS "Extracting version information from git describe...")</span><br><span style="color: hsl(0, 100%, 40%);">-    execute_process(</span><br><span style="color: hsl(0, 100%, 40%);">-        COMMAND ${GIT_EXECUTABLE} describe --always --abbrev=8 --long</span><br><span style="color: hsl(0, 100%, 40%);">-        OUTPUT_VARIABLE GIT_DESCRIBE OUTPUT_STRIP_TRAILING_WHITESPACE</span><br><span style="color: hsl(0, 100%, 40%);">-        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-else()</span><br><span style="color: hsl(0, 100%, 40%);">-    set(GIT_DESCRIBE "v${MAJOR_VERSION}.${API_COMPAT}.x-xxx-xunknown")</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Use the logic below to set the version constants</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-if("${MINOR_VERSION}" STREQUAL "git")</span><br><span style="color: hsl(0, 100%, 40%);">-    # VERSION: 3.3git-xxx-gxxxxxxxx</span><br><span style="color: hsl(0, 100%, 40%);">-    # DOCVER:  3.3git</span><br><span style="color: hsl(0, 100%, 40%);">-    # LIBVER:  3.3git</span><br><span style="color: hsl(0, 100%, 40%);">-    set(VERSION "${GIT_DESCRIBE}")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(DOCVER  "${MAJOR_VERSION}.${API_COMPAT}${MINOR_VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(LIBVER  "${MAJOR_VERSION}.${API_COMPAT}${MINOR_VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(RC_MINOR_VERSION "0")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(RC_MAINT_VERSION "0")</span><br><span style="color: hsl(0, 100%, 40%);">-elseif("${MAINT_VERSION}" STREQUAL "git")</span><br><span style="color: hsl(0, 100%, 40%);">-    # VERSION: 3.3.1git-xxx-gxxxxxxxx</span><br><span style="color: hsl(0, 100%, 40%);">-    # DOCVER:  3.3.1git</span><br><span style="color: hsl(0, 100%, 40%);">-    # LIBVER:  3.3.1git</span><br><span style="color: hsl(0, 100%, 40%);">-    set(VERSION "${GIT_DESCRIBE}")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(DOCVER  "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}${MAINT_VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(LIBVER  "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}${MAINT_VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    math(EXPR RC_MINOR_VERSION "${MINOR_VERSION} - 1")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(RC_MAINT_VERSION "0")</span><br><span style="color: hsl(0, 100%, 40%);">-else()</span><br><span style="color: hsl(0, 100%, 40%);">-    # This is a numbered release.</span><br><span style="color: hsl(0, 100%, 40%);">-    # VERSION: 3.3.1{.x}</span><br><span style="color: hsl(0, 100%, 40%);">-    # DOCVER:  3.3.1{.x}</span><br><span style="color: hsl(0, 100%, 40%);">-    # LIBVER:  3.3.1{.x}</span><br><span style="color: hsl(0, 100%, 40%);">-    if("${MAINT_VERSION}" STREQUAL "0")</span><br><span style="color: hsl(0, 100%, 40%);">-        set(VERSION "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    else()</span><br><span style="color: hsl(0, 100%, 40%);">-        set(VERSION "${MAJOR_VERSION}.${API_COMPAT}.${MINOR_VERSION}.${MAINT_VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-    set(DOCVER "${VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(LIBVER "${VERSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(RC_MINOR_VERSION ${MINOR_VERSION})</span><br><span style="color: hsl(0, 100%, 40%);">-    set(RC_MAINT_VERSION ${MAINT_VERSION})</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span>diff --git a/cmake/Modules/GrccCompile.cmake b/cmake/Modules/GrccCompile.cmake</span><br><span>index 4a917c5..4589fd4 100644</span><br><span>--- a/cmake/Modules/GrccCompile.cmake</span><br><span>+++ b/cmake/Modules/GrccCompile.cmake</span><br><span>@@ -30,25 +30,20 @@</span><br><span>     )</span><br><span> string(REPLACE ";" ":" PYTHONPATH "${PYTHONPATH}")</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+find_program(GRCC grcc</span><br><span style="color: hsl(120, 100%, 40%);">+    PATHS ${CMAKE_INSTALL_PREFIX}/${GR_RUNTIME_DIR}</span><br><span style="color: hsl(120, 100%, 40%);">+    )</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> macro(GRCC_COMPILE file_name)</span><br><span style="color: hsl(0, 100%, 40%);">-    if(${CMAKE_VERSION} VERSION_LESS "3.2.0") #use wrapper script to set the environment on systems without cmake 3.2</span><br><span style="color: hsl(0, 100%, 40%);">-        ADD_CUSTOM_COMMAND(</span><br><span style="color: hsl(0, 100%, 40%);">-            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${file_name}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND /bin/sh ${CMAKE_SOURCE_DIR}/cmake/Modules/GrccCompileWrapper.sh "${PYTHONPATH}" "${CMAKE_SOURCE_DIR}/grc" "${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${file_name}.grc"</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND "${CMAKE_COMMAND}" -E rename ${CMAKE_CURRENT_BINARY_DIR}/${file_name}.py ${CMAKE_CURRENT_BINARY_DIR}/${file_name}</span><br><span style="color: hsl(0, 100%, 40%);">-            DEPENDS ${file_name}.grc</span><br><span style="color: hsl(120, 100%, 40%);">+    ADD_CUSTOM_COMMAND(</span><br><span style="color: hsl(120, 100%, 40%);">+        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${file_name}</span><br><span style="color: hsl(120, 100%, 40%);">+        COMMAND "${CMAKE_COMMAND}"</span><br><span style="color: hsl(120, 100%, 40%);">+        -E env PYTHONPATH="${PYTHONPATH}" GRC_BLOCKS_PATH=${CMAKE_SOURCE_DIR}/grc</span><br><span style="color: hsl(120, 100%, 40%);">+        ${GRCC} -o ${CMAKE_CURRENT_BINARY_DIR}</span><br><span style="color: hsl(120, 100%, 40%);">+        ${CMAKE_CURRENT_SOURCE_DIR}/${file_name}.grc</span><br><span style="color: hsl(120, 100%, 40%);">+        COMMAND "${CMAKE_COMMAND}" -E rename ${CMAKE_CURRENT_BINARY_DIR}/${file_name}.py ${CMAKE_CURRENT_BINARY_DIR}/${file_name}</span><br><span style="color: hsl(120, 100%, 40%);">+        DEPENDS ${file_name}.grc</span><br><span>         )</span><br><span style="color: hsl(0, 100%, 40%);">-    else() #for the rest use new/more portable way</span><br><span style="color: hsl(0, 100%, 40%);">-        ADD_CUSTOM_COMMAND(</span><br><span style="color: hsl(0, 100%, 40%);">-            OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${file_name}</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND "${CMAKE_COMMAND}"</span><br><span style="color: hsl(0, 100%, 40%);">-                -E env PYTHONPATH="${PYTHONPATH}" GRC_BLOCKS_PATH=${CMAKE_SOURCE_DIR}/grc</span><br><span style="color: hsl(0, 100%, 40%);">-                ${PC_GNURADIO_RUNTIME_PREFIX}/${GR_RUNTIME_DIR}/grcc -d ${CMAKE_CURRENT_BINARY_DIR}</span><br><span style="color: hsl(0, 100%, 40%);">-                ${CMAKE_CURRENT_SOURCE_DIR}/${file_name}.grc</span><br><span style="color: hsl(0, 100%, 40%);">-            COMMAND "${CMAKE_COMMAND}" -E rename ${CMAKE_CURRENT_BINARY_DIR}/${file_name}.py ${CMAKE_CURRENT_BINARY_DIR}/${file_name}</span><br><span style="color: hsl(0, 100%, 40%);">-            DEPENDS ${file_name}.grc</span><br><span style="color: hsl(0, 100%, 40%);">-        )</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span> endmacro(GRCC_COMPILE)</span><br><span> </span><br><span> ########################################################################</span><br><span>diff --git a/cmake/Modules/GrccCompileWrapper.sh b/cmake/Modules/GrccCompileWrapper.sh</span><br><span>deleted file mode 100644</span><br><span>index 6c7f60f..0000000</span><br><span>--- a/cmake/Modules/GrccCompileWrapper.sh</span><br><span>+++ /dev/null</span><br><span>@@ -1,3 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-export PYTHONPATH="$1"</span><br><span style="color: hsl(0, 100%, 40%);">-export GRC_BLOCKS_PATH="$2"</span><br><span style="color: hsl(0, 100%, 40%);">-eval "$3"</span><br><span>diff --git a/cmake/Modules/UseSWIG.cmake b/cmake/Modules/UseSWIG.cmake</span><br><span>deleted file mode 100644</span><br><span>index e555435..0000000</span><br><span>--- a/cmake/Modules/UseSWIG.cmake</span><br><span>+++ /dev/null</span><br><span>@@ -1,305 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# - SWIG module for CMake</span><br><span style="color: hsl(0, 100%, 40%);">-# Defines the following macros:</span><br><span style="color: hsl(0, 100%, 40%);">-#   SWIG_ADD_MODULE(name language [ files ])</span><br><span style="color: hsl(0, 100%, 40%);">-#     - Define swig module with given name and specified language</span><br><span style="color: hsl(0, 100%, 40%);">-#   SWIG_LINK_LIBRARIES(name [ libraries ])</span><br><span style="color: hsl(0, 100%, 40%);">-#     - Link libraries to swig module</span><br><span style="color: hsl(0, 100%, 40%);">-# All other macros are for internal use only.</span><br><span style="color: hsl(0, 100%, 40%);">-# To get the actual name of the swig module,</span><br><span style="color: hsl(0, 100%, 40%);">-# use: ${SWIG_MODULE_${name}_REAL_NAME}.</span><br><span style="color: hsl(0, 100%, 40%);">-# Set Source files properties such as CPLUSPLUS and SWIG_FLAGS to specify</span><br><span style="color: hsl(0, 100%, 40%);">-# special behavior of SWIG. Also global CMAKE_SWIG_FLAGS can be used to add</span><br><span style="color: hsl(0, 100%, 40%);">-# special flags to all swig calls.</span><br><span style="color: hsl(0, 100%, 40%);">-# Another special variable is CMAKE_SWIG_OUTDIR, it allows one to specify</span><br><span style="color: hsl(0, 100%, 40%);">-# where to write all the swig generated module (swig -outdir option)</span><br><span style="color: hsl(0, 100%, 40%);">-# The name-specific variable SWIG_MODULE_<name>_EXTRA_DEPS may be used</span><br><span style="color: hsl(0, 100%, 40%);">-# to specify extra dependencies for the generated modules.</span><br><span style="color: hsl(0, 100%, 40%);">-# If the source file generated by swig need some special flag you can use</span><br><span style="color: hsl(0, 100%, 40%);">-# set_source_files_properties( ${swig_generated_file_fullname}</span><br><span style="color: hsl(0, 100%, 40%);">-#        PROPERTIES COMPILE_FLAGS "-bla")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#=============================================================================</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2004-2009 Kitware, Inc.</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com></span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Distributed under the OSI-approved BSD License (the "License");</span><br><span style="color: hsl(0, 100%, 40%);">-# see accompanying file Copyright.txt for details.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# This software is distributed WITHOUT ANY WARRANTY; without even the</span><br><span style="color: hsl(0, 100%, 40%);">-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</span><br><span style="color: hsl(0, 100%, 40%);">-# See the License for more information.</span><br><span style="color: hsl(0, 100%, 40%);">-#=============================================================================</span><br><span style="color: hsl(0, 100%, 40%);">-# (To distribute this file outside of CMake, substitute the full</span><br><span style="color: hsl(0, 100%, 40%);">-#  License text for the above reference.)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-set(SWIG_CXX_EXTENSION "cxx")</span><br><span style="color: hsl(0, 100%, 40%);">-set(SWIG_EXTRA_LIBRARIES "")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-set(SWIG_PYTHON_EXTRA_FILE_EXTENSION "py")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# For given swig module initialize variables associated with it</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-macro(SWIG_MODULE_INITIALIZE name language)</span><br><span style="color: hsl(0, 100%, 40%);">-  string(TOUPPER "${language}" swig_uppercase_language)</span><br><span style="color: hsl(0, 100%, 40%);">-  string(TOLOWER "${language}" swig_lowercase_language)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(SWIG_MODULE_${name}_LANGUAGE "${swig_uppercase_language}")</span><br><span style="color: hsl(0, 100%, 40%);">-  set(SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG "${swig_lowercase_language}")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  set(SWIG_MODULE_${name}_REAL_NAME "${name}")</span><br><span style="color: hsl(0, 100%, 40%);">-  if("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "UNKNOWN")</span><br><span style="color: hsl(0, 100%, 40%);">-    message(FATAL_ERROR "SWIG Error: Language \"${language}\" not found")</span><br><span style="color: hsl(0, 100%, 40%);">-  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PYTHON")</span><br><span style="color: hsl(0, 100%, 40%);">-    # when swig is used without the -interface it will produce in the module.py</span><br><span style="color: hsl(0, 100%, 40%);">-    # a 'import _modulename' statement, which implies having a corresponding</span><br><span style="color: hsl(0, 100%, 40%);">-    # _modulename.so (*NIX), _modulename.pyd (Win32).</span><br><span style="color: hsl(0, 100%, 40%);">-    set(SWIG_MODULE_${name}_REAL_NAME "_${name}")</span><br><span style="color: hsl(0, 100%, 40%);">-  elseif("${SWIG_MODULE_${name}_LANGUAGE}" STREQUAL "PERL")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(SWIG_MODULE_${name}_EXTRA_FLAGS "-shadow")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# For a given language, input file, and output file, determine extra files that</span><br><span style="color: hsl(0, 100%, 40%);">-# will be generated. This is internal swig macro.</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-macro(SWIG_GET_EXTRA_OUTPUT_FILES language outfiles generatedpath infile)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(${outfiles} "")</span><br><span style="color: hsl(0, 100%, 40%);">-  get_source_file_property(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename</span><br><span style="color: hsl(0, 100%, 40%);">-    ${infile} SWIG_MODULE_NAME)</span><br><span style="color: hsl(0, 100%, 40%);">-  if(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")</span><br><span style="color: hsl(0, 100%, 40%);">-    get_filename_component(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${infile}" NAME_WE)</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(it ${SWIG_${language}_EXTRA_FILE_EXTENSION})</span><br><span style="color: hsl(0, 100%, 40%);">-    set(${outfiles} ${${outfiles}}</span><br><span style="color: hsl(0, 100%, 40%);">-      "${generatedpath}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}.${it}")</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach()</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Take swig (*.i) file and add proper custom commands for it</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-macro(SWIG_ADD_SOURCE_TO_MODULE name outfiles infile)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_full_infile ${infile})</span><br><span style="color: hsl(0, 100%, 40%);">-  get_filename_component(swig_source_file_path "${infile}" PATH)</span><br><span style="color: hsl(0, 100%, 40%);">-  get_filename_component(swig_source_file_name_we "${infile}" NAME_WE)</span><br><span style="color: hsl(0, 100%, 40%);">-  get_source_file_property(swig_source_file_generated ${infile} GENERATED)</span><br><span style="color: hsl(0, 100%, 40%);">-  get_source_file_property(swig_source_file_cplusplus ${infile} CPLUSPLUS)</span><br><span style="color: hsl(0, 100%, 40%);">-  get_source_file_property(swig_source_file_flags ${infile} SWIG_FLAGS)</span><br><span style="color: hsl(0, 100%, 40%);">-  if("${swig_source_file_flags}" STREQUAL "NOTFOUND")</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_source_file_flags "")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_source_file_fullname "${infile}")</span><br><span style="color: hsl(0, 100%, 40%);">-  if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_SOURCE_DIR}")</span><br><span style="color: hsl(0, 100%, 40%);">-    string(REGEX REPLACE</span><br><span style="color: hsl(0, 100%, 40%);">-      "^${CMAKE_CURRENT_SOURCE_DIR}" ""</span><br><span style="color: hsl(0, 100%, 40%);">-      swig_source_file_relative_path</span><br><span style="color: hsl(0, 100%, 40%);">-      "${swig_source_file_path}")</span><br><span style="color: hsl(0, 100%, 40%);">-  else()</span><br><span style="color: hsl(0, 100%, 40%);">-    if(${swig_source_file_path} MATCHES "^${CMAKE_CURRENT_BINARY_DIR}")</span><br><span style="color: hsl(0, 100%, 40%);">-      string(REGEX REPLACE</span><br><span style="color: hsl(0, 100%, 40%);">-        "^${CMAKE_CURRENT_BINARY_DIR}" ""</span><br><span style="color: hsl(0, 100%, 40%);">-        swig_source_file_relative_path</span><br><span style="color: hsl(0, 100%, 40%);">-        "${swig_source_file_path}")</span><br><span style="color: hsl(0, 100%, 40%);">-      set(swig_source_file_generated 1)</span><br><span style="color: hsl(0, 100%, 40%);">-    else()</span><br><span style="color: hsl(0, 100%, 40%);">-      set(swig_source_file_relative_path "${swig_source_file_path}")</span><br><span style="color: hsl(0, 100%, 40%);">-      if(swig_source_file_generated)</span><br><span style="color: hsl(0, 100%, 40%);">-        set(swig_source_file_fullname "${CMAKE_CURRENT_BINARY_DIR}/${infile}")</span><br><span style="color: hsl(0, 100%, 40%);">-      else()</span><br><span style="color: hsl(0, 100%, 40%);">-        set(swig_source_file_fullname "${CMAKE_CURRENT_SOURCE_DIR}/${infile}")</span><br><span style="color: hsl(0, 100%, 40%);">-      endif()</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_generated_file_fullname</span><br><span style="color: hsl(0, 100%, 40%);">-    "${CMAKE_CURRENT_BINARY_DIR}")</span><br><span style="color: hsl(0, 100%, 40%);">-  if(swig_source_file_relative_path)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_generated_file_fullname</span><br><span style="color: hsl(0, 100%, 40%);">-      "${swig_generated_file_fullname}/${swig_source_file_relative_path}")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  # If CMAKE_SWIG_OUTDIR was specified then pass it to -outdir</span><br><span style="color: hsl(0, 100%, 40%);">-  if(CMAKE_SWIG_OUTDIR)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_outdir ${CMAKE_SWIG_OUTDIR})</span><br><span style="color: hsl(0, 100%, 40%);">-  else()</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_outdir ${CMAKE_CURRENT_BINARY_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${name}_LANGUAGE}</span><br><span style="color: hsl(0, 100%, 40%);">-    swig_extra_generated_files</span><br><span style="color: hsl(0, 100%, 40%);">-    "${swig_outdir}"</span><br><span style="color: hsl(0, 100%, 40%);">-    "${infile}")</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_generated_file_fullname</span><br><span style="color: hsl(0, 100%, 40%);">-    "${swig_generated_file_fullname}/${swig_source_file_name_we}")</span><br><span style="color: hsl(0, 100%, 40%);">-  # add the language into the name of the file (i.e. TCL_wrap)</span><br><span style="color: hsl(0, 100%, 40%);">-  # this allows for the same .i file to be wrapped into different languages</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_generated_file_fullname</span><br><span style="color: hsl(0, 100%, 40%);">-    "${swig_generated_file_fullname}${SWIG_MODULE_${name}_LANGUAGE}_wrap")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  if(swig_source_file_cplusplus)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_generated_file_fullname</span><br><span style="color: hsl(0, 100%, 40%);">-      "${swig_generated_file_fullname}.${SWIG_CXX_EXTENSION}")</span><br><span style="color: hsl(0, 100%, 40%);">-  else()</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_generated_file_fullname</span><br><span style="color: hsl(0, 100%, 40%);">-      "${swig_generated_file_fullname}.c")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # Shut up some warnings from poor SWIG code generation that we</span><br><span style="color: hsl(0, 100%, 40%);">-  # can do nothing about, when this flag is available</span><br><span style="color: hsl(0, 100%, 40%);">-  include(CheckCXXCompilerFlag)</span><br><span style="color: hsl(0, 100%, 40%);">-  check_cxx_compiler_flag("-Wno-unused-but-set-variable" HAVE_WNO_UNUSED_BUT_SET_VARIABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-  if(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-    set_source_files_properties(${swig_generated_file_fullname}</span><br><span style="color: hsl(0, 100%, 40%);">-      PROPERTIES COMPILE_FLAGS "-Wno-unused-but-set-variable")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif(HAVE_WNO_UNUSED_BUT_SET_VARIABLE)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  get_directory_property(cmake_include_directories INCLUDE_DIRECTORIES)</span><br><span style="color: hsl(0, 100%, 40%);">-  list(REMOVE_DUPLICATES cmake_include_directories)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_include_dirs)</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(it ${cmake_include_directories})</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_include_dirs ${swig_include_dirs} "-I${it}")</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_special_flags)</span><br><span style="color: hsl(0, 100%, 40%);">-  # default is c, so add c++ flag if it is c++</span><br><span style="color: hsl(0, 100%, 40%);">-  if(swig_source_file_cplusplus)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_special_flags ${swig_special_flags} "-c++")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_extra_flags)</span><br><span style="color: hsl(0, 100%, 40%);">-  if(SWIG_MODULE_${name}_EXTRA_FLAGS)</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_extra_flags ${swig_extra_flags} ${SWIG_MODULE_${name}_EXTRA_FLAGS})</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # hack to work around CMake bug in add_custom_command with multiple OUTPUT files</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  file(RELATIVE_PATH reldir ${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR})</span><br><span style="color: hsl(0, 100%, 40%);">-  execute_process(</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib</span><br><span style="color: hsl(0, 100%, 40%);">-unique = hashlib.md5('${reldir}${ARGN}').hexdigest()[:5]</span><br><span style="color: hsl(0, 100%, 40%);">-print(re.sub('\\W', '_', '${name} ${reldir} ' + unique))"</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  file(</span><br><span style="color: hsl(0, 100%, 40%);">-    WRITE ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in</span><br><span style="color: hsl(0, 100%, 40%);">-   "int main(void){return 0;}\n"</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # create dummy dependencies</span><br><span style="color: hsl(0, 100%, 40%);">-  add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${CMAKE_COMMAND} -E copy</span><br><span style="color: hsl(0, 100%, 40%);">-        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp.in</span><br><span style="color: hsl(0, 100%, 40%);">-        ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp</span><br><span style="color: hsl(0, 100%, 40%);">-    DEPENDS "${swig_source_file_fullname}" ${SWIG_MODULE_${name}_EXTRA_DEPS}</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMENT ""</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # create the dummy target</span><br><span style="color: hsl(0, 100%, 40%);">-  add_executable(${_target} ${CMAKE_CURRENT_BINARY_DIR}/${_target}.cpp)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  # add a custom command to the dummy target</span><br><span style="color: hsl(0, 100%, 40%);">-  add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-    TARGET ${_target}</span><br><span style="color: hsl(0, 100%, 40%);">-    # Let's create the ${swig_outdir} at execution time, in case dir contains $(OutDir)</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND ${CMAKE_COMMAND} -E make_directory ${swig_outdir}</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMAND "${SWIG_EXECUTABLE}"</span><br><span style="color: hsl(0, 100%, 40%);">-    ARGS "-${SWIG_MODULE_${name}_SWIG_LANGUAGE_FLAG}"</span><br><span style="color: hsl(0, 100%, 40%);">-    ${swig_source_file_flags}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${CMAKE_SWIG_FLAGS}</span><br><span style="color: hsl(0, 100%, 40%);">-    -outdir ${swig_outdir}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${swig_special_flags}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${swig_extra_flags}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${swig_include_dirs}</span><br><span style="color: hsl(0, 100%, 40%);">-    -o "${swig_generated_file_fullname}"</span><br><span style="color: hsl(0, 100%, 40%);">-    "${swig_source_file_fullname}"</span><br><span style="color: hsl(0, 100%, 40%);">-    COMMENT "Swig source"</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  #add dummy independent dependencies from the _target to each file</span><br><span style="color: hsl(0, 100%, 40%);">-  #that will be generated by the SWIG command above</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  set(${outfiles} "${swig_generated_file_fullname}" ${swig_extra_generated_files})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(swig_gen_file ${${outfiles}})</span><br><span style="color: hsl(0, 100%, 40%);">-    add_custom_command(</span><br><span style="color: hsl(0, 100%, 40%);">-      OUTPUT ${swig_gen_file}</span><br><span style="color: hsl(0, 100%, 40%);">-      COMMAND "${CMAKE_COMMAND}" -E touch_nocreate "${swig_gen_file}"</span><br><span style="color: hsl(0, 100%, 40%);">-      DEPENDS ${_target}</span><br><span style="color: hsl(0, 100%, 40%);">-      COMMENT "dummy command to show ${_target} dependency of ${swig_gen_file}"</span><br><span style="color: hsl(0, 100%, 40%);">-    )</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  set_source_files_properties(</span><br><span style="color: hsl(0, 100%, 40%);">-    ${outfiles} PROPERTIES GENERATED 1</span><br><span style="color: hsl(0, 100%, 40%);">-  )</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Create Swig module</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-macro(SWIG_ADD_MODULE name language)</span><br><span style="color: hsl(0, 100%, 40%);">-  SWIG_MODULE_INITIALIZE(${name} ${language})</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_dot_i_sources)</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_other_sources)</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(it ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-    if(${it} MATCHES ".*\\.i$")</span><br><span style="color: hsl(0, 100%, 40%);">-      set(swig_dot_i_sources ${swig_dot_i_sources} "${it}")</span><br><span style="color: hsl(0, 100%, 40%);">-    else()</span><br><span style="color: hsl(0, 100%, 40%);">-      set(swig_other_sources ${swig_other_sources} "${it}")</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-  set(swig_generated_sources)</span><br><span style="color: hsl(0, 100%, 40%);">-  foreach(it ${swig_dot_i_sources})</span><br><span style="color: hsl(0, 100%, 40%);">-    SWIG_ADD_SOURCE_TO_MODULE(${name} swig_generated_source ${it})</span><br><span style="color: hsl(0, 100%, 40%);">-    set(swig_generated_sources ${swig_generated_sources} "${swig_generated_source}")</span><br><span style="color: hsl(0, 100%, 40%);">-  endforeach()</span><br><span style="color: hsl(0, 100%, 40%);">-  get_directory_property(swig_extra_clean_files ADDITIONAL_MAKE_CLEAN_FILES)</span><br><span style="color: hsl(0, 100%, 40%);">-  set_directory_properties(PROPERTIES</span><br><span style="color: hsl(0, 100%, 40%);">-    ADDITIONAL_MAKE_CLEAN_FILES "${swig_extra_clean_files};${swig_generated_sources}")</span><br><span style="color: hsl(0, 100%, 40%);">-  add_library(${SWIG_MODULE_${name}_REAL_NAME}</span><br><span style="color: hsl(0, 100%, 40%);">-    MODULE</span><br><span style="color: hsl(0, 100%, 40%);">-    ${swig_generated_sources}</span><br><span style="color: hsl(0, 100%, 40%);">-    ${swig_other_sources})</span><br><span style="color: hsl(0, 100%, 40%);">-  string(TOLOWER "${language}" swig_lowercase_language)</span><br><span style="color: hsl(0, 100%, 40%);">-  if ("${swig_lowercase_language}" STREQUAL "java")</span><br><span style="color: hsl(0, 100%, 40%);">-    if (APPLE)</span><br><span style="color: hsl(0, 100%, 40%);">-        # In java you want:</span><br><span style="color: hsl(0, 100%, 40%);">-        #      System.loadLibrary("LIBRARY");</span><br><span style="color: hsl(0, 100%, 40%);">-        # then JNI will look for a library whose name is platform dependent, namely</span><br><span style="color: hsl(0, 100%, 40%);">-        #   MacOS  : libLIBRARY.jnilib</span><br><span style="color: hsl(0, 100%, 40%);">-        #   Windows: LIBRARY.dll</span><br><span style="color: hsl(0, 100%, 40%);">-        #   Linux  : libLIBRARY.so</span><br><span style="color: hsl(0, 100%, 40%);">-        set_target_properties (${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")</span><br><span style="color: hsl(0, 100%, 40%);">-      endif ()</span><br><span style="color: hsl(0, 100%, 40%);">-  endif ()</span><br><span style="color: hsl(0, 100%, 40%);">-  if ("${swig_lowercase_language}" STREQUAL "python")</span><br><span style="color: hsl(0, 100%, 40%);">-    # this is only needed for the python case where a _modulename.so is generated</span><br><span style="color: hsl(0, 100%, 40%);">-    set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES PREFIX "")</span><br><span style="color: hsl(0, 100%, 40%);">-    # Python extension modules on Windows must have the extension ".pyd"</span><br><span style="color: hsl(0, 100%, 40%);">-    # instead of ".dll" as of Python 2.5.  Older python versions do support</span><br><span style="color: hsl(0, 100%, 40%);">-    # this suffix.</span><br><span style="color: hsl(0, 100%, 40%);">-    # http://docs.python.org/whatsnew/ports.html#SECTION0001510000000000000000</span><br><span style="color: hsl(0, 100%, 40%);">-    # <quote></span><br><span style="color: hsl(0, 100%, 40%);">-    # Windows: .dll is no longer supported as a filename extension for extension modules.</span><br><span style="color: hsl(0, 100%, 40%);">-    # .pyd is now the only filename extension that will be searched for.</span><br><span style="color: hsl(0, 100%, 40%);">-    # </quote></span><br><span style="color: hsl(0, 100%, 40%);">-    if(WIN32 AND NOT CYGWIN)</span><br><span style="color: hsl(0, 100%, 40%);">-      set_target_properties(${SWIG_MODULE_${name}_REAL_NAME} PROPERTIES SUFFIX ".pyd")</span><br><span style="color: hsl(0, 100%, 40%);">-    endif()</span><br><span style="color: hsl(0, 100%, 40%);">-  endif ()</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-# Like TARGET_LINK_LIBRARIES but for swig modules</span><br><span style="color: hsl(0, 100%, 40%);">-#</span><br><span style="color: hsl(0, 100%, 40%);">-macro(SWIG_LINK_LIBRARIES name)</span><br><span style="color: hsl(0, 100%, 40%);">-  if(SWIG_MODULE_${name}_REAL_NAME)</span><br><span style="color: hsl(0, 100%, 40%);">-    target_link_libraries(${SWIG_MODULE_${name}_REAL_NAME} ${ARGN})</span><br><span style="color: hsl(0, 100%, 40%);">-  else()</span><br><span style="color: hsl(0, 100%, 40%);">-    message(SEND_ERROR "Cannot find Swig library \"${name}\".")</span><br><span style="color: hsl(0, 100%, 40%);">-  endif()</span><br><span style="color: hsl(0, 100%, 40%);">-endmacro()</span><br><span>diff --git a/cmake/Modules/targetConfig.cmake.in b/cmake/Modules/targetConfig.cmake.in</span><br><span>new file mode 100644</span><br><span>index 0000000..79e4a28</span><br><span>--- /dev/null</span><br><span>+++ b/cmake/Modules/targetConfig.cmake.in</span><br><span>@@ -0,0 +1,26 @@</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright 2018 Free Software Foundation, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# GNU Radio is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+# it under the terms of the GNU General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+# the Free Software Foundation; either version 3, or (at your option)</span><br><span style="color: hsl(120, 100%, 40%);">+# any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# GNU Radio is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+# GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+# along with GNU Radio; see the file COPYING.  If not, write to</span><br><span style="color: hsl(120, 100%, 40%);">+# the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span style="color: hsl(120, 100%, 40%);">+# Boston, MA 02110-1301, USA.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+include(CMakeFindDependencyMacro)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+set(target_deps "@TARGET_DEPENDENCIES@")</span><br><span style="color: hsl(120, 100%, 40%);">+foreach(dep IN LISTS target_deps)</span><br><span style="color: hsl(120, 100%, 40%);">+    find_dependency(${dep})</span><br><span style="color: hsl(120, 100%, 40%);">+endforeach()</span><br><span style="color: hsl(120, 100%, 40%);">+include("${CMAKE_CURRENT_LIST_DIR}/@TARGET@Targets.cmake")</span><br><span>diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt</span><br><span>index ed0fe3d..f9b8b40 100644</span><br><span>--- a/docs/CMakeLists.txt</span><br><span>+++ b/docs/CMakeLists.txt</span><br><span>@@ -53,7 +53,7 @@</span><br><span> if(NOT RST2MAN_EXECUTABLE)</span><br><span>     message(WARNING "rst2man from python-docutils is required to build man pages")</span><br><span> else()</span><br><span style="color: hsl(0, 100%, 40%);">-    build_man_page(MAN1_OUTPUT grgsm_livemon.rst grgsm_livemon.1)</span><br><span style="color: hsl(120, 100%, 40%);">+    #build_man_page(MAN1_OUTPUT grgsm_livemon.rst grgsm_livemon.1)</span><br><span>     install(FILES ${MAN1_OUTPUT} DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man/man1)</span><br><span> endif()</span><br><span> </span><br><span>diff --git a/docs/doxygen/CMakeLists.txt b/docs/doxygen/CMakeLists.txt</span><br><span>index 1b44799..6ade92c 100644</span><br><span>--- a/docs/doxygen/CMakeLists.txt</span><br><span>+++ b/docs/doxygen/CMakeLists.txt</span><br><span>@@ -1,6 +1,7 @@</span><br><span> # Copyright 2011 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>diff --git a/docs/doxygen/Doxyfile.in b/docs/doxygen/Doxyfile.in</span><br><span>index 17badbc..0b4cb7e 100644</span><br><span>--- a/docs/doxygen/Doxyfile.in</span><br><span>+++ b/docs/doxygen/Doxyfile.in</span><br><span>@@ -1,14 +1,16 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Doxyfile 1.5.7.1</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxyfile 1.8.4</span><br><span> </span><br><span> # This file describes the settings to be used by the documentation system</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen (www.doxygen.org) for a project</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen (www.doxygen.org) for a project.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# All text after a hash (#) is considered a comment and will be ignored</span><br><span style="color: hsl(120, 100%, 40%);">+# All text after a double hash (##) is considered a comment and is placed</span><br><span style="color: hsl(120, 100%, 40%);">+# in front of the TAG it is preceding .</span><br><span style="color: hsl(120, 100%, 40%);">+# All text after a hash (#) is considered a comment and will be ignored.</span><br><span> # The format is:</span><br><span> #       TAG = value [value, ...]</span><br><span> # For lists items can also be appended using:</span><br><span> #       TAG += value [value, ...]</span><br><span style="color: hsl(0, 100%, 40%);">-# Values that contain spaces should be placed between quotes (" ")</span><br><span style="color: hsl(120, 100%, 40%);">+# Values that contain spaces should be placed between quotes (" ").</span><br><span> </span><br><span> #---------------------------------------------------------------------------</span><br><span> # Project related configuration options</span><br><span>@@ -22,8 +24,9 @@</span><br><span> </span><br><span> DOXYFILE_ENCODING      = UTF-8</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded</span><br><span style="color: hsl(0, 100%, 40%);">-# by quotes) that should identify the project.</span><br><span style="color: hsl(120, 100%, 40%);">+# The PROJECT_NAME tag is a single word (or sequence of words) that should</span><br><span style="color: hsl(120, 100%, 40%);">+# identify the project. Note that if you do not use Doxywizard you need</span><br><span style="color: hsl(120, 100%, 40%);">+# to put quotes around the project name if it contains spaces.</span><br><span> </span><br><span> PROJECT_NAME           = "GNU Radio's GSM Package"</span><br><span> </span><br><span>@@ -33,6 +36,19 @@</span><br><span> </span><br><span> PROJECT_NUMBER         =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# Using the PROJECT_BRIEF tag one can provide an optional one line description</span><br><span style="color: hsl(120, 100%, 40%);">+# for a project that appears at the top of each page and should give viewer</span><br><span style="color: hsl(120, 100%, 40%);">+# a quick idea about the purpose of the project. Keep the description short.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+PROJECT_BRIEF          =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# With the PROJECT_LOGO tag one can specify an logo or icon that is</span><br><span style="color: hsl(120, 100%, 40%);">+# included in the documentation. The maximum height of the logo should not</span><br><span style="color: hsl(120, 100%, 40%);">+# exceed 55 pixels and the maximum width should not exceed 200 pixels.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen will copy the logo to the output directory.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+PROJECT_LOGO           =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)</span><br><span> # base path where the generated documentation will be put.</span><br><span> # If a relative path is entered, it will be relative to the location</span><br><span>@@ -54,11 +70,11 @@</span><br><span> # information to generate all constant output in the proper language.</span><br><span> # The default language is English, other supported languages are:</span><br><span> # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,</span><br><span style="color: hsl(0, 100%, 40%);">-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,</span><br><span style="color: hsl(0, 100%, 40%);">-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),</span><br><span style="color: hsl(0, 100%, 40%);">-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,</span><br><span style="color: hsl(0, 100%, 40%);">-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene,</span><br><span style="color: hsl(0, 100%, 40%);">-# Spanish, Swedish, and Ukrainian.</span><br><span style="color: hsl(120, 100%, 40%);">+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,</span><br><span style="color: hsl(120, 100%, 40%);">+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English</span><br><span style="color: hsl(120, 100%, 40%);">+# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian,</span><br><span style="color: hsl(120, 100%, 40%);">+# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic,</span><br><span style="color: hsl(120, 100%, 40%);">+# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.</span><br><span> </span><br><span> OUTPUT_LANGUAGE        = English</span><br><span> </span><br><span>@@ -112,7 +128,9 @@</span><br><span> # only done if one of the specified strings matches the left-hand part of</span><br><span> # the path. The tag can be used to show relative paths in the file list.</span><br><span> # If left blank the directory from which doxygen is run is used as the</span><br><span style="color: hsl(0, 100%, 40%);">-# path to strip.</span><br><span style="color: hsl(120, 100%, 40%);">+# path to strip. Note that you specify absolute paths here, but also</span><br><span style="color: hsl(120, 100%, 40%);">+# relative paths, which will be relative from the directory where doxygen is</span><br><span style="color: hsl(120, 100%, 40%);">+# started.</span><br><span> </span><br><span> STRIP_FROM_PATH        =</span><br><span> </span><br><span>@@ -126,7 +144,7 @@</span><br><span> STRIP_FROM_INC_PATH    =</span><br><span> </span><br><span> # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter</span><br><span style="color: hsl(0, 100%, 40%);">-# (but less readable) file names. This can be useful is your file systems</span><br><span style="color: hsl(120, 100%, 40%);">+# (but less readable) file names. This can be useful if your file system</span><br><span> # doesn't support long names like on DOS, Mac, or CD-ROM.</span><br><span> </span><br><span> SHORT_NAMES            = NO</span><br><span>@@ -181,6 +199,13 @@</span><br><span> </span><br><span> ALIASES                =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# This tag can be used to specify a number of word-keyword mappings (TCL only).</span><br><span style="color: hsl(120, 100%, 40%);">+# A mapping has the form "name=value". For example adding</span><br><span style="color: hsl(120, 100%, 40%);">+# "class=itcl::class" will allow you to use the command class in the</span><br><span style="color: hsl(120, 100%, 40%);">+# itcl::class meaning.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+TCL_SUBST              =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C</span><br><span> # sources only. Doxygen will then generate output that is more tailored for C.</span><br><span> # For instance, some of the names that are used will be different. The list</span><br><span>@@ -207,11 +232,40 @@</span><br><span> </span><br><span> OPTIMIZE_OUTPUT_VHDL   = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen selects the parser to use depending on the extension of the files it</span><br><span style="color: hsl(120, 100%, 40%);">+# parses. With this tag you can assign which parser to use for a given</span><br><span style="color: hsl(120, 100%, 40%);">+# extension. Doxygen has a built-in mapping, but you can override or extend it</span><br><span style="color: hsl(120, 100%, 40%);">+# using this tag. The format is ext=language, where ext is a file extension,</span><br><span style="color: hsl(120, 100%, 40%);">+# and language is one of the parsers supported by doxygen: IDL, Java,</span><br><span style="color: hsl(120, 100%, 40%);">+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,</span><br><span style="color: hsl(120, 100%, 40%);">+# C++. For instance to make doxygen treat .inc files as Fortran files (default</span><br><span style="color: hsl(120, 100%, 40%);">+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note</span><br><span style="color: hsl(120, 100%, 40%);">+# that for custom extensions you also need to set FILE_PATTERNS otherwise the</span><br><span style="color: hsl(120, 100%, 40%);">+# files are not read by doxygen.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTENSION_MAPPING      =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all</span><br><span style="color: hsl(120, 100%, 40%);">+# comments according to the Markdown format, which allows for more readable</span><br><span style="color: hsl(120, 100%, 40%);">+# documentation. See http://daringfireball.net/projects/markdown/ for details.</span><br><span style="color: hsl(120, 100%, 40%);">+# The output of markdown processing is further processed by doxygen, so you</span><br><span style="color: hsl(120, 100%, 40%);">+# can mix doxygen, HTML, and XML commands with Markdown formatting.</span><br><span style="color: hsl(120, 100%, 40%);">+# Disable only in case of backward compatibilities issues.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MARKDOWN_SUPPORT       = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When enabled doxygen tries to link words that correspond to documented</span><br><span style="color: hsl(120, 100%, 40%);">+# classes, or namespaces to their corresponding documentation. Such a link can</span><br><span style="color: hsl(120, 100%, 40%);">+# be prevented in individual cases by by putting a % sign in front of the word</span><br><span style="color: hsl(120, 100%, 40%);">+# or globally by setting AUTOLINK_SUPPORT to NO.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AUTOLINK_SUPPORT       = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want</span><br><span> # to include (a tag file for) the STL sources as input, then you should</span><br><span> # set this tag to YES in order to let doxygen match functions declarations and</span><br><span> # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.</span><br><span style="color: hsl(0, 100%, 40%);">-# func(std::string) {}). This also make the inheritance and collaboration</span><br><span style="color: hsl(120, 100%, 40%);">+# func(std::string) {}). This also makes the inheritance and collaboration</span><br><span> # diagrams that involve STL classes more complete and accurate.</span><br><span> </span><br><span> BUILTIN_STL_SUPPORT    = YES</span><br><span>@@ -227,10 +281,10 @@</span><br><span> </span><br><span> SIP_SUPPORT            = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# For Microsoft's IDL there are propget and propput attributes to indicate getter</span><br><span style="color: hsl(0, 100%, 40%);">-# and setter methods for a property. Setting this option to YES (the default)</span><br><span style="color: hsl(0, 100%, 40%);">-# will make doxygen to replace the get and set methods by a property in the</span><br><span style="color: hsl(0, 100%, 40%);">-# documentation. This will only work if the methods are indeed getting or</span><br><span style="color: hsl(120, 100%, 40%);">+# For Microsoft's IDL there are propget and propput attributes to indicate</span><br><span style="color: hsl(120, 100%, 40%);">+# getter and setter methods for a property. Setting this option to YES (the</span><br><span style="color: hsl(120, 100%, 40%);">+# default) will make doxygen replace the get and set methods by a property in</span><br><span style="color: hsl(120, 100%, 40%);">+# the documentation. This will only work if the methods are indeed getting or</span><br><span> # setting a simple type. If this is not the case, or you want to show the</span><br><span> # methods anyway, you should set this option to NO.</span><br><span> </span><br><span>@@ -251,6 +305,22 @@</span><br><span> </span><br><span> SUBGROUPING            = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and</span><br><span style="color: hsl(120, 100%, 40%);">+# unions are shown inside the group in which they are included (e.g. using</span><br><span style="color: hsl(120, 100%, 40%);">+# @ingroup) instead of on a separate page (for HTML and Man pages) or</span><br><span style="color: hsl(120, 100%, 40%);">+# section (for LaTeX and RTF).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+INLINE_GROUPED_CLASSES = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and</span><br><span style="color: hsl(120, 100%, 40%);">+# unions with only public data fields or simple typedef fields will be shown</span><br><span style="color: hsl(120, 100%, 40%);">+# inline in the documentation of the scope in which they are defined (i.e. file,</span><br><span style="color: hsl(120, 100%, 40%);">+# namespace, or group documentation), provided this scope is documented. If set</span><br><span style="color: hsl(120, 100%, 40%);">+# to NO (the default), structs, classes, and unions are shown on a separate</span><br><span style="color: hsl(120, 100%, 40%);">+# page (for HTML and Man pages) or section (for LaTeX and RTF).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+INLINE_SIMPLE_STRUCTS  = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum</span><br><span> # is documented as struct, union, or enum with the name of the typedef. So</span><br><span> # typedef struct TypeS {} TypeT, will appear in the documentation as a struct</span><br><span>@@ -261,21 +331,16 @@</span><br><span> </span><br><span> TYPEDEF_HIDES_STRUCT   = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to</span><br><span style="color: hsl(0, 100%, 40%);">-# determine which symbols to keep in memory and which to flush to disk.</span><br><span style="color: hsl(0, 100%, 40%);">-# When the cache is full, less often used symbols will be written to disk.</span><br><span style="color: hsl(0, 100%, 40%);">-# For small to medium size projects (<1000 input files) the default value is</span><br><span style="color: hsl(0, 100%, 40%);">-# probably good enough. For larger projects a too small cache size can cause</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen to be busy swapping symbols to and from disk most of the time</span><br><span style="color: hsl(0, 100%, 40%);">-# causing a significant performance penality.</span><br><span style="color: hsl(0, 100%, 40%);">-# If the system has enough physical memory increasing the cache will improve the</span><br><span style="color: hsl(0, 100%, 40%);">-# performance by keeping more symbols in memory. Note that the value works on</span><br><span style="color: hsl(0, 100%, 40%);">-# a logarithmic scale so increasing the size by one will rougly double the</span><br><span style="color: hsl(0, 100%, 40%);">-# memory usage. The cache size is given by this formula:</span><br><span style="color: hsl(0, 100%, 40%);">-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,</span><br><span style="color: hsl(0, 100%, 40%);">-# corresponding to a cache size of 2^16 = 65536 symbols</span><br><span style="color: hsl(120, 100%, 40%);">+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This</span><br><span style="color: hsl(120, 100%, 40%);">+# cache is used to resolve symbols given their name and scope. Since this can</span><br><span style="color: hsl(120, 100%, 40%);">+# be an expensive process and often the same symbol appear multiple times in</span><br><span style="color: hsl(120, 100%, 40%);">+# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too</span><br><span style="color: hsl(120, 100%, 40%);">+# small doxygen will become slower. If the cache is too large, memory is wasted.</span><br><span style="color: hsl(120, 100%, 40%);">+# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid</span><br><span style="color: hsl(120, 100%, 40%);">+# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536</span><br><span style="color: hsl(120, 100%, 40%);">+# symbols.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-SYMBOL_CACHE_SIZE      = 4</span><br><span style="color: hsl(120, 100%, 40%);">+LOOKUP_CACHE_SIZE      = 0</span><br><span> </span><br><span> #---------------------------------------------------------------------------</span><br><span> # Build related configuration options</span><br><span>@@ -284,7 +349,7 @@</span><br><span> # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in</span><br><span> # documentation are documented, even if no documentation was available.</span><br><span> # Private class members and static file members will be hidden unless</span><br><span style="color: hsl(0, 100%, 40%);">-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES</span><br><span style="color: hsl(120, 100%, 40%);">+# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES</span><br><span> </span><br><span> EXTRACT_ALL            = YES</span><br><span> </span><br><span>@@ -293,6 +358,11 @@</span><br><span> </span><br><span> EXTRACT_PRIVATE        = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal</span><br><span style="color: hsl(120, 100%, 40%);">+# scope will be included in the documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRACT_PACKAGE        = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the EXTRACT_STATIC tag is set to YES all static members of a file</span><br><span> # will be included in the documentation.</span><br><span> </span><br><span>@@ -315,7 +385,7 @@</span><br><span> # extracted and appear in the documentation as a namespace called</span><br><span> # 'anonymous_namespace{file}', where file will be replaced with the base</span><br><span> # name of the file that contains the anonymous namespace. By default</span><br><span style="color: hsl(0, 100%, 40%);">-# anonymous namespace are hidden.</span><br><span style="color: hsl(120, 100%, 40%);">+# anonymous namespaces are hidden.</span><br><span> </span><br><span> EXTRACT_ANON_NSPACES   = NO</span><br><span> </span><br><span>@@ -375,6 +445,12 @@</span><br><span> </span><br><span> SHOW_INCLUDE_FILES     = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# will list include files with double quotes in the documentation</span><br><span style="color: hsl(120, 100%, 40%);">+# rather than with sharp brackets.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FORCE_LOCAL_INCLUDES   = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]</span><br><span> # is inserted in the documentation for inline members.</span><br><span> </span><br><span>@@ -394,6 +470,16 @@</span><br><span> </span><br><span> SORT_BRIEF_DOCS        = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# will sort the (brief and detailed) documentation of class members so that</span><br><span style="color: hsl(120, 100%, 40%);">+# constructors and destructors are listed first. If set to NO (the default)</span><br><span style="color: hsl(120, 100%, 40%);">+# the constructors will appear in the respective orders defined by</span><br><span style="color: hsl(120, 100%, 40%);">+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.</span><br><span style="color: hsl(120, 100%, 40%);">+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO</span><br><span style="color: hsl(120, 100%, 40%);">+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SORT_MEMBERS_CTORS_1ST = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the</span><br><span> # hierarchy of group names into alphabetical order. If set to NO (the default)</span><br><span> # the group names will appear in their defined order.</span><br><span>@@ -410,6 +496,15 @@</span><br><span> </span><br><span> SORT_BY_SCOPE_NAME     = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to</span><br><span style="color: hsl(120, 100%, 40%);">+# do proper type resolution of all parameters of a function it will reject a</span><br><span style="color: hsl(120, 100%, 40%);">+# match between the prototype and the implementation of a member function even</span><br><span style="color: hsl(120, 100%, 40%);">+# if there is only one candidate or it is obvious which candidate to choose</span><br><span style="color: hsl(120, 100%, 40%);">+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# will still accept a match between prototype and implementation in such cases.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+STRICT_PROTO_MATCHING  = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The GENERATE_TODOLIST tag can be used to enable (YES) or</span><br><span> # disable (NO) the todo list. This list is created by putting \todo</span><br><span> # commands in the documentation.</span><br><span>@@ -435,15 +530,16 @@</span><br><span> GENERATE_DEPRECATEDLIST= NO</span><br><span> </span><br><span> # The ENABLED_SECTIONS tag can be used to enable conditional</span><br><span style="color: hsl(0, 100%, 40%);">-# documentation sections, marked by \if sectionname ... \endif.</span><br><span style="color: hsl(120, 100%, 40%);">+# documentation sections, marked by \if section-label ... \endif</span><br><span style="color: hsl(120, 100%, 40%);">+# and \cond section-label ... \endcond blocks.</span><br><span> </span><br><span> ENABLED_SECTIONS       =</span><br><span> </span><br><span> # The MAX_INITIALIZER_LINES tag determines the maximum number of lines</span><br><span style="color: hsl(0, 100%, 40%);">-# the initial value of a variable or define consists of for it to appear in</span><br><span style="color: hsl(120, 100%, 40%);">+# the initial value of a variable or macro consists of for it to appear in</span><br><span> # the documentation. If the initializer consists of more lines than specified</span><br><span> # here it will be hidden. Use a value of 0 to hide initializers completely.</span><br><span style="color: hsl(0, 100%, 40%);">-# The appearance of the initializer of individual variables and defines in the</span><br><span style="color: hsl(120, 100%, 40%);">+# The appearance of the initializer of individual variables and macros in the</span><br><span> # documentation can be controlled using \showinitializer or \hideinitializer</span><br><span> # command in the documentation regardless of this setting.</span><br><span> </span><br><span>@@ -455,12 +551,6 @@</span><br><span> </span><br><span> SHOW_USED_FILES        = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the sources in your project are distributed over multiple directories</span><br><span style="color: hsl(0, 100%, 40%);">-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy</span><br><span style="color: hsl(0, 100%, 40%);">-# in the documentation. The default is NO.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-SHOW_DIRECTORIES       = NO</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> # Set the SHOW_FILES tag to NO to disable the generation of the Files page.</span><br><span> # This will remove the Files entry from the Quick Index and from the</span><br><span> # Folder Tree View (if specified). The default is YES.</span><br><span>@@ -468,7 +558,8 @@</span><br><span> SHOW_FILES             = YES</span><br><span> </span><br><span> # Set the SHOW_NAMESPACES tag to NO to disable the generation of the</span><br><span style="color: hsl(0, 100%, 40%);">-# Namespaces page.  This will remove the Namespaces entry from the Quick Index</span><br><span style="color: hsl(120, 100%, 40%);">+# Namespaces page.</span><br><span style="color: hsl(120, 100%, 40%);">+# This will remove the Namespaces entry from the Quick Index</span><br><span> # and from the Folder Tree View (if specified). The default is YES.</span><br><span> </span><br><span> SHOW_NAMESPACES        = NO</span><br><span>@@ -483,15 +574,26 @@</span><br><span> </span><br><span> FILE_VERSION_FILTER    =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen. The layout file controls the global structure of the generated output files</span><br><span style="color: hsl(0, 100%, 40%);">-# in an output format independent way. The create the layout file that represents</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a</span><br><span style="color: hsl(0, 100%, 40%);">-# file name after the option, if omitted DoxygenLayout.xml will be used as the name</span><br><span style="color: hsl(0, 100%, 40%);">-# of the layout file.</span><br><span style="color: hsl(120, 100%, 40%);">+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed</span><br><span style="color: hsl(120, 100%, 40%);">+# by doxygen. The layout file controls the global structure of the generated</span><br><span style="color: hsl(120, 100%, 40%);">+# output files in an output format independent way. To create the layout file</span><br><span style="color: hsl(120, 100%, 40%);">+# that represents doxygen's defaults, run doxygen with the -l option.</span><br><span style="color: hsl(120, 100%, 40%);">+# You can optionally specify a file name after the option, if omitted</span><br><span style="color: hsl(120, 100%, 40%);">+# DoxygenLayout.xml will be used as the name of the layout file.</span><br><span> </span><br><span> LAYOUT_FILE            =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The CITE_BIB_FILES tag can be used to specify one or more bib files</span><br><span style="color: hsl(120, 100%, 40%);">+# containing the references data. This must be a list of .bib files. The</span><br><span style="color: hsl(120, 100%, 40%);">+# .bib extension is automatically appended if omitted. Using this command</span><br><span style="color: hsl(120, 100%, 40%);">+# requires the bibtex tool to be installed. See also</span><br><span style="color: hsl(120, 100%, 40%);">+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style</span><br><span style="color: hsl(120, 100%, 40%);">+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this</span><br><span style="color: hsl(120, 100%, 40%);">+# feature you need bibtex and perl available in the search path. Do not use</span><br><span style="color: hsl(120, 100%, 40%);">+# file names with spaces, bibtex cannot handle them.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+CITE_BIB_FILES         =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to warning and progress messages</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -520,7 +622,7 @@</span><br><span> </span><br><span> WARN_IF_DOC_ERROR      = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# This WARN_NO_PARAMDOC option can be abled to get warnings for</span><br><span style="color: hsl(120, 100%, 40%);">+# The WARN_NO_PARAMDOC option can be enabled to get warnings for</span><br><span> # functions that are documented, but have no documentation for their parameters</span><br><span> # or return value. If set to NO (the default) doxygen will only warn about</span><br><span> # wrong or incomplete parameter documentation, but not about the absence of</span><br><span>@@ -552,7 +654,8 @@</span><br><span> # directories like "/usr/src/myproject". Separate the files or directories</span><br><span> # with spaces.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-INPUT                  = @top_srcdir@ @top_builddir@</span><br><span style="color: hsl(120, 100%, 40%);">+INPUT                  = "@top_srcdir@" \</span><br><span style="color: hsl(120, 100%, 40%);">+                         "@top_builddir@"</span><br><span> </span><br><span> # This tag can be used to specify the character encoding of the source files</span><br><span> # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is</span><br><span>@@ -566,8 +669,9 @@</span><br><span> # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp</span><br><span> # and *.h) to filter out the source-files in the directories. If left</span><br><span> # blank the following patterns are tested:</span><br><span style="color: hsl(0, 100%, 40%);">-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx</span><br><span style="color: hsl(0, 100%, 40%);">-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90</span><br><span style="color: hsl(120, 100%, 40%);">+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh</span><br><span style="color: hsl(120, 100%, 40%);">+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py</span><br><span style="color: hsl(120, 100%, 40%);">+# *.f90 *.f *.for *.vhd *.vhdl</span><br><span> </span><br><span> FILE_PATTERNS          = *.h \</span><br><span>                          *.dox</span><br><span>@@ -578,18 +682,20 @@</span><br><span> </span><br><span> RECURSIVE              = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The EXCLUDE tag can be used to specify files and/or directories that should</span><br><span style="color: hsl(120, 100%, 40%);">+# The EXCLUDE tag can be used to specify files and/or directories that should be</span><br><span> # excluded from the INPUT source files. This way you can easily exclude a</span><br><span> # subdirectory from a directory tree whose root is specified with the INPUT tag.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that relative paths are relative to the directory from which doxygen is</span><br><span style="color: hsl(120, 100%, 40%);">+# run.</span><br><span> </span><br><span> EXCLUDE                = @abs_top_builddir@/docs/doxygen/html \</span><br><span style="color: hsl(0, 100%, 40%);">-                     @abs_top_builddir@/docs/doxygen/xml \</span><br><span style="color: hsl(120, 100%, 40%);">+                         @abs_top_builddir@/docs/doxygen/xml \</span><br><span>                          @abs_top_builddir@/docs/doxygen/other/doxypy.py \</span><br><span style="color: hsl(0, 100%, 40%);">-                     @abs_top_builddir@/_CPack_Packages \</span><br><span style="color: hsl(120, 100%, 40%);">+                         @abs_top_builddir@/_CPack_Packages \</span><br><span>                          @abs_top_srcdir@/cmake</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or</span><br><span style="color: hsl(0, 100%, 40%);">-# directories that are symbolic links (a Unix filesystem feature) are excluded</span><br><span style="color: hsl(120, 100%, 40%);">+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or</span><br><span style="color: hsl(120, 100%, 40%);">+# directories that are symbolic links (a Unix file system feature) are excluded</span><br><span> # from the input.</span><br><span> </span><br><span> EXCLUDE_SYMLINKS       = NO</span><br><span>@@ -667,19 +773,24 @@</span><br><span> # by executing (via popen()) the command <filter> <input-file>, where <filter></span><br><span> # is the value of the INPUT_FILTER tag, and <input-file> is the name of an</span><br><span> # input file. Doxygen will then use the output that the filter program writes</span><br><span style="color: hsl(0, 100%, 40%);">-# to standard output.  If FILTER_PATTERNS is specified, this tag will be</span><br><span style="color: hsl(0, 100%, 40%);">-# ignored.</span><br><span style="color: hsl(120, 100%, 40%);">+# to standard output.</span><br><span style="color: hsl(120, 100%, 40%);">+# If FILTER_PATTERNS is specified, this tag will be ignored.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that the filter must not add or remove lines; it is applied before the</span><br><span style="color: hsl(120, 100%, 40%);">+# code is scanned, but not when the output code is generated. If lines are added</span><br><span style="color: hsl(120, 100%, 40%);">+# or removed, the anchors will not be placed correctly.</span><br><span> </span><br><span> INPUT_FILTER           =</span><br><span> </span><br><span> # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern</span><br><span style="color: hsl(0, 100%, 40%);">-# basis.  Doxygen will compare the file name with each pattern and apply the</span><br><span style="color: hsl(0, 100%, 40%);">-# filter if there is a match.  The filters are a list of the form:</span><br><span style="color: hsl(120, 100%, 40%);">+# basis.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen will compare the file name with each pattern and apply the</span><br><span style="color: hsl(120, 100%, 40%);">+# filter if there is a match.</span><br><span style="color: hsl(120, 100%, 40%);">+# The filters are a list of the form:</span><br><span> # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further</span><br><span style="color: hsl(0, 100%, 40%);">-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER</span><br><span style="color: hsl(0, 100%, 40%);">-# is applied to all files.</span><br><span style="color: hsl(120, 100%, 40%);">+# info on how filters are used. If FILTER_PATTERNS is empty or if</span><br><span style="color: hsl(120, 100%, 40%);">+# non of the patterns match the file name, INPUT_FILTER is applied.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-FILTER_PATTERNS        = *.py=@top_srcdir@/doc/doxygen/other/doxypy.py</span><br><span style="color: hsl(120, 100%, 40%);">+FILTER_PATTERNS        = *.py="@top_srcdir@"/doc/doxygen/other/doxypy.py</span><br><span> </span><br><span> # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using</span><br><span> # INPUT_FILTER) will be used to filter the input files when producing source</span><br><span>@@ -687,6 +798,21 @@</span><br><span> </span><br><span> FILTER_SOURCE_FILES    = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file</span><br><span style="color: hsl(120, 100%, 40%);">+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)</span><br><span style="color: hsl(120, 100%, 40%);">+# and it is also possible to disable source filtering for a specific pattern</span><br><span style="color: hsl(120, 100%, 40%);">+# using *.ext= (so without naming a filter). This option only has effect when</span><br><span style="color: hsl(120, 100%, 40%);">+# FILTER_SOURCE_FILES is enabled.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FILTER_SOURCE_PATTERNS =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that</span><br><span style="color: hsl(120, 100%, 40%);">+# is part of the input, its contents will be placed on the main page</span><br><span style="color: hsl(120, 100%, 40%);">+# (index.html). This can be useful if you have a project on for instance GitHub</span><br><span style="color: hsl(120, 100%, 40%);">+# and want reuse the introduction page also for the doxygen output.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+USE_MDFILE_AS_MAINPAGE =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to source browsing</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -705,7 +831,7 @@</span><br><span> </span><br><span> # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct</span><br><span> # doxygen to hide any special comment blocks from generated source code</span><br><span style="color: hsl(0, 100%, 40%);">-# fragments. Normal C and C++ comments will always remain visible.</span><br><span style="color: hsl(120, 100%, 40%);">+# fragments. Normal C, C++ and Fortran comments will always remain visible.</span><br><span> </span><br><span> STRIP_CODE_COMMENTS    = NO</span><br><span> </span><br><span>@@ -724,7 +850,8 @@</span><br><span> # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)</span><br><span> # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from</span><br><span> # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will</span><br><span style="color: hsl(0, 100%, 40%);">-# link to the source code.  Otherwise they will link to the documentstion.</span><br><span style="color: hsl(120, 100%, 40%);">+# link to the source code.</span><br><span style="color: hsl(120, 100%, 40%);">+# Otherwise they will link to the documentation.</span><br><span> </span><br><span> REFERENCES_LINK_SOURCE = YES</span><br><span> </span><br><span>@@ -788,7 +915,14 @@</span><br><span> </span><br><span> # The HTML_HEADER tag can be used to specify a personal HTML header for</span><br><span> # each generated HTML page. If it is left blank doxygen will generate a</span><br><span style="color: hsl(0, 100%, 40%);">-# standard header.</span><br><span style="color: hsl(120, 100%, 40%);">+# standard header. Note that when using a custom header you are responsible</span><br><span style="color: hsl(120, 100%, 40%);">+#  for the proper inclusion of any scripts and style sheets that doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# needs, which is dependent on the configuration options used.</span><br><span style="color: hsl(120, 100%, 40%);">+# It is advised to generate a default header using "doxygen -w html</span><br><span style="color: hsl(120, 100%, 40%);">+# header.html footer.html stylesheet.css YourConfigFile" and then modify</span><br><span style="color: hsl(120, 100%, 40%);">+# that header. Note that the header is subject to change so you typically</span><br><span style="color: hsl(120, 100%, 40%);">+# have to redo this when upgrading to a newer version of doxygen or when</span><br><span style="color: hsl(120, 100%, 40%);">+# changing the value of configuration settings such as GENERATE_TREEVIEW!</span><br><span> </span><br><span> HTML_HEADER            =</span><br><span> </span><br><span>@@ -800,27 +934,80 @@</span><br><span> </span><br><span> # The HTML_STYLESHEET tag can be used to specify a user-defined cascading</span><br><span> # style sheet that is used by each HTML page. It can be used to</span><br><span style="color: hsl(0, 100%, 40%);">-# fine-tune the look of the HTML output. If the tag is left blank doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-# will generate a default style sheet. Note that doxygen will try to copy</span><br><span style="color: hsl(0, 100%, 40%);">-# the style sheet file to the HTML output directory, so don't put your own</span><br><span style="color: hsl(0, 100%, 40%);">-# stylesheet in the HTML output directory as well, or it will be erased!</span><br><span style="color: hsl(120, 100%, 40%);">+# fine-tune the look of the HTML output. If left blank doxygen will</span><br><span style="color: hsl(120, 100%, 40%);">+# generate a default style sheet. Note that it is recommended to use</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this</span><br><span style="color: hsl(120, 100%, 40%);">+# tag will in the future become obsolete.</span><br><span> </span><br><span> HTML_STYLESHEET        =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,</span><br><span style="color: hsl(0, 100%, 40%);">-# files or namespaces will be aligned in HTML using tables. If set to</span><br><span style="color: hsl(0, 100%, 40%);">-# NO a bullet list will be used.</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional</span><br><span style="color: hsl(120, 100%, 40%);">+# user-defined cascading style sheet that is included after the standard</span><br><span style="color: hsl(120, 100%, 40%);">+# style sheets created by doxygen. Using this option one can overrule</span><br><span style="color: hsl(120, 100%, 40%);">+# certain style aspects. This is preferred over using HTML_STYLESHEET</span><br><span style="color: hsl(120, 100%, 40%);">+# since it does not replace the standard style sheet and is therefore more</span><br><span style="color: hsl(120, 100%, 40%);">+# robust against future updates. Doxygen will copy the style sheet file to</span><br><span style="color: hsl(120, 100%, 40%);">+# the output directory.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-HTML_ALIGN_MEMBERS     = YES</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_EXTRA_STYLESHEET  =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or</span><br><span style="color: hsl(120, 100%, 40%);">+# other source files which should be copied to the HTML output directory. Note</span><br><span style="color: hsl(120, 100%, 40%);">+# that these files will be copied to the base HTML output directory. Use the</span><br><span style="color: hsl(120, 100%, 40%);">+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these</span><br><span style="color: hsl(120, 100%, 40%);">+# files. In the HTML_STYLESHEET file, use the file name only. Also note that</span><br><span style="color: hsl(120, 100%, 40%);">+# the files will be copied as-is; there are no commands or markers available.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_EXTRA_FILES       =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen will adjust the colors in the style sheet and background images</span><br><span style="color: hsl(120, 100%, 40%);">+# according to this color. Hue is specified as an angle on a colorwheel,</span><br><span style="color: hsl(120, 100%, 40%);">+# see http://en.wikipedia.org/wiki/Hue for more information.</span><br><span style="color: hsl(120, 100%, 40%);">+# For instance the value 0 represents red, 60 is yellow, 120 is green,</span><br><span style="color: hsl(120, 100%, 40%);">+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.</span><br><span style="color: hsl(120, 100%, 40%);">+# The allowed range is 0 to 359.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_COLORSTYLE_HUE    = 220</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of</span><br><span style="color: hsl(120, 100%, 40%);">+# the colors in the HTML output. For a value of 0 the output will use</span><br><span style="color: hsl(120, 100%, 40%);">+# grayscales only. A value of 255 will produce the most vivid colors.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_COLORSTYLE_SAT    = 100</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to</span><br><span style="color: hsl(120, 100%, 40%);">+# the luminance component of the colors in the HTML output. Values below</span><br><span style="color: hsl(120, 100%, 40%);">+# 100 gradually make the output lighter, whereas values above 100 make</span><br><span style="color: hsl(120, 100%, 40%);">+# the output darker. The value divided by 100 is the actual gamma applied,</span><br><span style="color: hsl(120, 100%, 40%);">+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,</span><br><span style="color: hsl(120, 100%, 40%);">+# and 100 does not change the gamma.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_COLORSTYLE_GAMMA  = 80</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML</span><br><span style="color: hsl(120, 100%, 40%);">+# page will contain the date and time when the page was generated. Setting</span><br><span style="color: hsl(120, 100%, 40%);">+# this to NO can help when comparing the output of multiple runs.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_TIMESTAMP         = NO</span><br><span> </span><br><span> # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML</span><br><span> # documentation will contain sections that can be hidden and shown after the</span><br><span style="color: hsl(0, 100%, 40%);">-# page has loaded. For this to work a browser that supports</span><br><span style="color: hsl(0, 100%, 40%);">-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox</span><br><span style="color: hsl(0, 100%, 40%);">-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).</span><br><span style="color: hsl(120, 100%, 40%);">+# page has loaded.</span><br><span> </span><br><span> HTML_DYNAMIC_SECTIONS  = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of</span><br><span style="color: hsl(120, 100%, 40%);">+# entries shown in the various tree structured indices initially; the user</span><br><span style="color: hsl(120, 100%, 40%);">+# can expand and collapse entries dynamically later on. Doxygen will expand</span><br><span style="color: hsl(120, 100%, 40%);">+# the tree to such a level that at most the specified number of entries are</span><br><span style="color: hsl(120, 100%, 40%);">+# visible (unless a fully collapsed tree already exceeds this amount).</span><br><span style="color: hsl(120, 100%, 40%);">+# So setting the number of entries 1 will produce a full collapsed tree by</span><br><span style="color: hsl(120, 100%, 40%);">+# default. 0 is a special value representing an infinite number of entries</span><br><span style="color: hsl(120, 100%, 40%);">+# and will result in a full expanded tree by default.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_INDEX_NUM_ENTRIES = 100</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the GENERATE_DOCSET tag is set to YES, additional index files</span><br><span> # will be generated that can be used as input for Apple's Xcode 3</span><br><span> # integrated development environment, introduced with OSX 10.5 (Leopard).</span><br><span>@@ -829,7 +1016,8 @@</span><br><span> # directory and running "make install" will install the docset in</span><br><span> # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find</span><br><span> # it at startup.</span><br><span style="color: hsl(0, 100%, 40%);">-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.</span><br><span style="color: hsl(120, 100%, 40%);">+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html</span><br><span style="color: hsl(120, 100%, 40%);">+# for more information.</span><br><span> </span><br><span> GENERATE_DOCSET        = NO</span><br><span> </span><br><span>@@ -847,6 +1035,16 @@</span><br><span> </span><br><span> DOCSET_BUNDLE_ID       = org.doxygen.Project</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely</span><br><span style="color: hsl(120, 100%, 40%);">+# identify the documentation publisher. This should be a reverse domain-name</span><br><span style="color: hsl(120, 100%, 40%);">+# style string, e.g. com.mycompany.MyDocSet.documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOCSET_PUBLISHER_NAME  = Publisher</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the GENERATE_HTMLHELP tag is set to YES, additional index files</span><br><span> # will be generated that can be used as input for tools like the</span><br><span> # Microsoft HTML help workshop to generate a compiled HTML help file (.chm)</span><br><span>@@ -891,10 +1089,10 @@</span><br><span> </span><br><span> TOC_EXPAND             = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER</span><br><span style="color: hsl(0, 100%, 40%);">-# are set, an additional index file will be generated that can be used as input for</span><br><span style="color: hsl(0, 100%, 40%);">-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated</span><br><span style="color: hsl(0, 100%, 40%);">-# HTML documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and</span><br><span style="color: hsl(120, 100%, 40%);">+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated</span><br><span style="color: hsl(120, 100%, 40%);">+# that can be used as input for Qt's qhelpgenerator to generate a</span><br><span style="color: hsl(120, 100%, 40%);">+# Qt Compressed Help (.qch) of the generated HTML documentation.</span><br><span> </span><br><span> GENERATE_QHP           = NO</span><br><span> </span><br><span>@@ -906,57 +1104,99 @@</span><br><span> </span><br><span> # The QHP_NAMESPACE tag specifies the namespace to use when generating</span><br><span> # Qt Help Project output. For more information please see</span><br><span style="color: hsl(0, 100%, 40%);">-# <a href="http://doc.trolltech.com/qthelpproject.html#namespace">Qt Help Project / Namespace</a>.</span><br><span style="color: hsl(120, 100%, 40%);">+# http://doc.trolltech.com/qthelpproject.html#namespace</span><br><span> </span><br><span> QHP_NAMESPACE          = org.doxygen.Project</span><br><span> </span><br><span> # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating</span><br><span> # Qt Help Project output. For more information please see</span><br><span style="color: hsl(0, 100%, 40%);">-# <a href="http://doc.trolltech.com/qthelpproject.html#virtual-folders">Qt Help Project / Virtual Folders</a>.</span><br><span style="color: hsl(120, 100%, 40%);">+# http://doc.trolltech.com/qthelpproject.html#virtual-folders</span><br><span> </span><br><span> QHP_VIRTUAL_FOLDER     = doc</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to</span><br><span style="color: hsl(120, 100%, 40%);">+# add. For more information please see</span><br><span style="color: hsl(120, 100%, 40%);">+# http://doc.trolltech.com/qthelpproject.html#custom-filters</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+QHP_CUST_FILTER_NAME   =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the</span><br><span style="color: hsl(120, 100%, 40%);">+# custom filter to add. For more information please see</span><br><span style="color: hsl(120, 100%, 40%);">+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"></span><br><span style="color: hsl(120, 100%, 40%);">+# Qt Help Project / Custom Filters</a>.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+QHP_CUST_FILTER_ATTRS  =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this</span><br><span style="color: hsl(120, 100%, 40%);">+# project's</span><br><span style="color: hsl(120, 100%, 40%);">+# filter section matches.</span><br><span style="color: hsl(120, 100%, 40%);">+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"></span><br><span style="color: hsl(120, 100%, 40%);">+# Qt Help Project / Filter Attributes</a>.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+QHP_SECT_FILTER_ATTRS  =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can</span><br><span> # be used to specify the location of Qt's qhelpgenerator.</span><br><span> # If non-empty doxygen will try to run qhelpgenerator on the generated</span><br><span style="color: hsl(0, 100%, 40%);">-# .qhp file .</span><br><span style="color: hsl(120, 100%, 40%);">+# .qhp file.</span><br><span> </span><br><span> QHG_LOCATION           =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at</span><br><span style="color: hsl(0, 100%, 40%);">-# top of each HTML page. The value NO (the default) enables the index and</span><br><span style="color: hsl(0, 100%, 40%);">-# the value YES disables it.</span><br><span style="color: hsl(120, 100%, 40%);">+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files</span><br><span style="color: hsl(120, 100%, 40%);">+#  will be generated, which together with the HTML files, form an Eclipse help</span><br><span style="color: hsl(120, 100%, 40%);">+# plugin. To install this plugin and make it available under the help contents</span><br><span style="color: hsl(120, 100%, 40%);">+# menu in Eclipse, the contents of the directory containing the HTML and XML</span><br><span style="color: hsl(120, 100%, 40%);">+# files needs to be copied into the plugins directory of eclipse. The name of</span><br><span style="color: hsl(120, 100%, 40%);">+# the directory within the plugins directory should be the same as</span><br><span style="color: hsl(120, 100%, 40%);">+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before</span><br><span style="color: hsl(120, 100%, 40%);">+# the help appears.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+GENERATE_ECLIPSEHELP   = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# A unique identifier for the eclipse help plugin. When installing the plugin</span><br><span style="color: hsl(120, 100%, 40%);">+# the directory name containing the HTML and XML files should also have</span><br><span style="color: hsl(120, 100%, 40%);">+# this name.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ECLIPSE_DOC_ID         = org.doxygen.Project</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)</span><br><span style="color: hsl(120, 100%, 40%);">+# at top of each HTML page. The value NO (the default) enables the index and</span><br><span style="color: hsl(120, 100%, 40%);">+# the value YES disables it. Since the tabs have the same information as the</span><br><span style="color: hsl(120, 100%, 40%);">+# navigation tree you can set this option to NO if you already set</span><br><span style="color: hsl(120, 100%, 40%);">+# GENERATE_TREEVIEW to YES.</span><br><span> </span><br><span> DISABLE_INDEX          = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# This tag can be used to set the number of enum values (range [1..20])</span><br><span style="color: hsl(0, 100%, 40%);">-# that doxygen will group on one line in the generated HTML documentation.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-ENUM_VALUES_PER_LINE   = 4</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index</span><br><span> # structure should be generated to display hierarchical information.</span><br><span style="color: hsl(0, 100%, 40%);">-# If the tag value is set to FRAME, a side panel will be generated</span><br><span style="color: hsl(120, 100%, 40%);">+# If the tag value is set to YES, a side panel will be generated</span><br><span> # containing a tree-like index structure (just like the one that</span><br><span> # is generated for HTML Help). For this to work a browser that supports</span><br><span style="color: hsl(0, 100%, 40%);">-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,</span><br><span style="color: hsl(0, 100%, 40%);">-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are</span><br><span style="color: hsl(0, 100%, 40%);">-# probably better off using the HTML help feature. Other possible values</span><br><span style="color: hsl(0, 100%, 40%);">-# for this tag are: HIERARCHIES, which will generate the Groups, Directories,</span><br><span style="color: hsl(0, 100%, 40%);">-# and Class Hierarchy pages using a tree view instead of an ordered list;</span><br><span style="color: hsl(0, 100%, 40%);">-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which</span><br><span style="color: hsl(0, 100%, 40%);">-# disables this behavior completely. For backwards compatibility with previous</span><br><span style="color: hsl(0, 100%, 40%);">-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE</span><br><span style="color: hsl(0, 100%, 40%);">-# respectively.</span><br><span style="color: hsl(120, 100%, 40%);">+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).</span><br><span style="color: hsl(120, 100%, 40%);">+# Windows users are probably better off using the HTML help feature.</span><br><span style="color: hsl(120, 100%, 40%);">+# Since the tree basically has the same information as the tab index you</span><br><span style="color: hsl(120, 100%, 40%);">+# could consider to set DISABLE_INDEX to NO when enabling this option.</span><br><span> </span><br><span> GENERATE_TREEVIEW      = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values</span><br><span style="color: hsl(120, 100%, 40%);">+# (range [0,1..20]) that doxygen will group on one line in the generated HTML</span><br><span style="color: hsl(120, 100%, 40%);">+# documentation. Note that a value of 0 will completely suppress the enum</span><br><span style="color: hsl(120, 100%, 40%);">+# values from appearing in the overview section.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ENUM_VALUES_PER_LINE   = 4</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be</span><br><span> # used to set the initial width (in pixels) of the frame in which the tree</span><br><span> # is shown.</span><br><span> </span><br><span> TREEVIEW_WIDTH         = 180</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open</span><br><span style="color: hsl(120, 100%, 40%);">+# links to external symbols imported via tag files in a separate window.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXT_LINKS_IN_WINDOW    = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Use this tag to change the font size of Latex formulas included</span><br><span> # as images in the HTML documentation. The default is 10. Note that</span><br><span> # when you change the font size after a successful doxygen run you need</span><br><span>@@ -965,6 +1205,112 @@</span><br><span> </span><br><span> FORMULA_FONTSIZE       = 10</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# Use the FORMULA_TRANPARENT tag to determine whether or not the images</span><br><span style="color: hsl(120, 100%, 40%);">+# generated for formulas are transparent PNGs. Transparent PNGs are</span><br><span style="color: hsl(120, 100%, 40%);">+# not supported properly for IE 6.0, but are supported on all modern browsers.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that when changing this option you need to delete any form_*.png files</span><br><span style="color: hsl(120, 100%, 40%);">+# in the HTML output before the changes have effect.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FORMULA_TRANSPARENT    = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax</span><br><span style="color: hsl(120, 100%, 40%);">+# (see http://www.mathjax.org) which uses client side Javascript for the</span><br><span style="color: hsl(120, 100%, 40%);">+# rendering instead of using prerendered bitmaps. Use this if you do not</span><br><span style="color: hsl(120, 100%, 40%);">+# have LaTeX installed or if you want to formulas look prettier in the HTML</span><br><span style="color: hsl(120, 100%, 40%);">+# output. When enabled you may also need to install MathJax separately and</span><br><span style="color: hsl(120, 100%, 40%);">+# configure the path to it using the MATHJAX_RELPATH option.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+USE_MATHJAX            = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When MathJax is enabled you can set the default output format to be used for</span><br><span style="color: hsl(120, 100%, 40%);">+# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and</span><br><span style="color: hsl(120, 100%, 40%);">+# SVG. The default value is HTML-CSS, which is slower, but has the best</span><br><span style="color: hsl(120, 100%, 40%);">+# compatibility.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_FORMAT         = HTML-CSS</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When MathJax is enabled you need to specify the location relative to the</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML output directory using the MATHJAX_RELPATH option. The destination</span><br><span style="color: hsl(120, 100%, 40%);">+# directory should contain the MathJax.js script. For instance, if the mathjax</span><br><span style="color: hsl(120, 100%, 40%);">+# directory is located at the same level as the HTML output directory, then</span><br><span style="color: hsl(120, 100%, 40%);">+# MATHJAX_RELPATH should be ../mathjax. The default value points to</span><br><span style="color: hsl(120, 100%, 40%);">+# the MathJax Content Delivery Network so you can quickly see the result without</span><br><span style="color: hsl(120, 100%, 40%);">+# installing MathJax.</span><br><span style="color: hsl(120, 100%, 40%);">+# However, it is strongly recommended to install a local</span><br><span style="color: hsl(120, 100%, 40%);">+# copy of MathJax from http://www.mathjax.org before deployment.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension</span><br><span style="color: hsl(120, 100%, 40%);">+# names that should be enabled during MathJax rendering.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_EXTENSIONS     =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript</span><br><span style="color: hsl(120, 100%, 40%);">+# pieces of code that will be used on startup of the MathJax code.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_CODEFILE       =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When the SEARCHENGINE tag is enabled doxygen will generate a search box</span><br><span style="color: hsl(120, 100%, 40%);">+# for the HTML output. The underlying search engine uses javascript</span><br><span style="color: hsl(120, 100%, 40%);">+# and DHTML and should work on any modern browser. Note that when using</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets</span><br><span style="color: hsl(120, 100%, 40%);">+# (GENERATE_DOCSET) there is already a search function so this one should</span><br><span style="color: hsl(120, 100%, 40%);">+# typically be disabled. For large projects the javascript based search engine</span><br><span style="color: hsl(120, 100%, 40%);">+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SEARCHENGINE           = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be</span><br><span style="color: hsl(120, 100%, 40%);">+# implemented using a web server instead of a web client using Javascript.</span><br><span style="color: hsl(120, 100%, 40%);">+# There are two flavours of web server based search depending on the</span><br><span style="color: hsl(120, 100%, 40%);">+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for</span><br><span style="color: hsl(120, 100%, 40%);">+# searching and an index file used by the script. When EXTERNAL_SEARCH is</span><br><span style="color: hsl(120, 100%, 40%);">+# enabled the indexing and searching needs to be provided by external tools.</span><br><span style="color: hsl(120, 100%, 40%);">+# See the manual for details.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SERVER_BASED_SEARCH    = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP</span><br><span style="color: hsl(120, 100%, 40%);">+# script for searching. Instead the search results are written to an XML file</span><br><span style="color: hsl(120, 100%, 40%);">+# which needs to be processed by an external indexer. Doxygen will invoke an</span><br><span style="color: hsl(120, 100%, 40%);">+# external search engine pointed to by the SEARCHENGINE_URL option to obtain</span><br><span style="color: hsl(120, 100%, 40%);">+# the search results. Doxygen ships with an example indexer (doxyindexer) and</span><br><span style="color: hsl(120, 100%, 40%);">+# search engine (doxysearch.cgi) which are based on the open source search</span><br><span style="color: hsl(120, 100%, 40%);">+# engine library Xapian. See the manual for configuration details.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTERNAL_SEARCH        = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The SEARCHENGINE_URL should point to a search engine hosted by a web server</span><br><span style="color: hsl(120, 100%, 40%);">+# which will returned the search results when EXTERNAL_SEARCH is enabled.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen ships with an example search engine (doxysearch) which is based on</span><br><span style="color: hsl(120, 100%, 40%);">+# the open source search engine library Xapian. See the manual for configuration</span><br><span style="color: hsl(120, 100%, 40%);">+# details.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SEARCHENGINE_URL       =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed</span><br><span style="color: hsl(120, 100%, 40%);">+# search data is written to a file for indexing by an external tool. With the</span><br><span style="color: hsl(120, 100%, 40%);">+# SEARCHDATA_FILE tag the name of this file can be specified.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SEARCHDATA_FILE        = searchdata.xml</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the</span><br><span style="color: hsl(120, 100%, 40%);">+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is</span><br><span style="color: hsl(120, 100%, 40%);">+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple</span><br><span style="color: hsl(120, 100%, 40%);">+# projects and redirect the results back to the right project.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTERNAL_SEARCH_ID     =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# projects other than the one defined by this configuration file, but that are</span><br><span style="color: hsl(120, 100%, 40%);">+# all added to the same external search index. Each project needs to have a</span><br><span style="color: hsl(120, 100%, 40%);">+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id</span><br><span style="color: hsl(120, 100%, 40%);">+# of to a relative location where the documentation can be found.</span><br><span style="color: hsl(120, 100%, 40%);">+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_SEARCH_MAPPINGS  =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to the LaTeX output</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -982,6 +1328,9 @@</span><br><span> </span><br><span> # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be</span><br><span> # invoked. If left blank `latex' will be used as the default command name.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that when enabling USE_PDFLATEX this option is only used for</span><br><span style="color: hsl(120, 100%, 40%);">+# generating bitmaps for formulas in the HTML output, but not in the</span><br><span style="color: hsl(120, 100%, 40%);">+# Makefile that is written to the output directory.</span><br><span> </span><br><span> LATEX_CMD_NAME         = latex</span><br><span> </span><br><span>@@ -998,8 +1347,8 @@</span><br><span> COMPACT_LATEX          = NO</span><br><span> </span><br><span> # The PAPER_TYPE tag can be used to set the paper type that is used</span><br><span style="color: hsl(0, 100%, 40%);">-# by the printer. Possible values are: a4, a4wide, letter, legal and</span><br><span style="color: hsl(0, 100%, 40%);">-# executive. If left blank a4wide will be used.</span><br><span style="color: hsl(120, 100%, 40%);">+# by the printer. Possible values are: a4, letter, legal and</span><br><span style="color: hsl(120, 100%, 40%);">+# executive. If left blank a4 will be used.</span><br><span> </span><br><span> PAPER_TYPE             = letter</span><br><span> </span><br><span>@@ -1015,6 +1364,20 @@</span><br><span> </span><br><span> LATEX_HEADER           =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for</span><br><span style="color: hsl(120, 100%, 40%);">+# the generated latex document. The footer should contain everything after</span><br><span style="color: hsl(120, 100%, 40%);">+# the last chapter. If it is left blank doxygen will generate a</span><br><span style="color: hsl(120, 100%, 40%);">+# standard footer. Notice: only use this tag if you know what you are doing!</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+LATEX_FOOTER           =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images</span><br><span style="color: hsl(120, 100%, 40%);">+# or other source files which should be copied to the LaTeX output directory.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that the files will be copied as-is; there are no commands or markers</span><br><span style="color: hsl(120, 100%, 40%);">+# available.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+LATEX_EXTRA_FILES      =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated</span><br><span> # is prepared for conversion to pdf (using ps2pdf). The pdf file will</span><br><span> # contain links (just like the HTML output) instead of page references</span><br><span>@@ -1041,6 +1404,19 @@</span><br><span> </span><br><span> LATEX_HIDE_INDICES     = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If LATEX_SOURCE_CODE is set to YES then doxygen will include</span><br><span style="color: hsl(120, 100%, 40%);">+# source code with syntax highlighting in the LaTeX output.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that which sources are shown also depends on other settings</span><br><span style="color: hsl(120, 100%, 40%);">+# such as SOURCE_BROWSER.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+LATEX_SOURCE_CODE      = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the</span><br><span style="color: hsl(120, 100%, 40%);">+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See</span><br><span style="color: hsl(120, 100%, 40%);">+# http://en.wikipedia.org/wiki/BibTeX for more info.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+LATEX_BIB_STYLE        = plain</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to the RTF output</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -1072,7 +1448,7 @@</span><br><span> </span><br><span> RTF_HYPERLINKS         = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# Load stylesheet definitions from file. Syntax is similar to doxygen's</span><br><span style="color: hsl(120, 100%, 40%);">+# Load style sheet definitions from file. Syntax is similar to doxygen's</span><br><span> # config file, i.e. a series of assignments. You only have to provide</span><br><span> # replacements, missing definitions are set to their default value.</span><br><span> </span><br><span>@@ -1127,18 +1503,6 @@</span><br><span> </span><br><span> XML_OUTPUT             = xml</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The XML_SCHEMA tag can be used to specify an XML schema,</span><br><span style="color: hsl(0, 100%, 40%);">-# which can be used by a validating XML parser to check the</span><br><span style="color: hsl(0, 100%, 40%);">-# syntax of the XML files.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-XML_SCHEMA             =</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# The XML_DTD tag can be used to specify an XML DTD,</span><br><span style="color: hsl(0, 100%, 40%);">-# which can be used by a validating XML parser to check the</span><br><span style="color: hsl(0, 100%, 40%);">-# syntax of the XML files.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-XML_DTD                =</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> # If the XML_PROGRAMLISTING tag is set to YES Doxygen will</span><br><span> # dump the program listings (including syntax highlighting</span><br><span> # and cross-referencing information) to the XML output. Note that</span><br><span>@@ -1147,6 +1511,21 @@</span><br><span> XML_PROGRAMLISTING     = NO</span><br><span> </span><br><span> #---------------------------------------------------------------------------</span><br><span style="color: hsl(120, 100%, 40%);">+# configuration options related to the DOCBOOK output</span><br><span style="color: hsl(120, 100%, 40%);">+#---------------------------------------------------------------------------</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files</span><br><span style="color: hsl(120, 100%, 40%);">+# that can be used to generate PDF.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+GENERATE_DOCBOOK       = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put.</span><br><span style="color: hsl(120, 100%, 40%);">+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in</span><br><span style="color: hsl(120, 100%, 40%);">+# front of it. If left blank docbook will be used as the default path.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOCBOOK_OUTPUT         = docbook</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#---------------------------------------------------------------------------</span><br><span> # configuration options for the AutoGen Definitions output</span><br><span> #---------------------------------------------------------------------------</span><br><span> </span><br><span>@@ -1177,8 +1556,10 @@</span><br><span> PERLMOD_LATEX          = NO</span><br><span> </span><br><span> # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be</span><br><span style="color: hsl(0, 100%, 40%);">-# nicely formatted so it can be parsed by a human reader.  This is useful</span><br><span style="color: hsl(0, 100%, 40%);">-# if you want to understand what is going on.  On the other hand, if this</span><br><span style="color: hsl(120, 100%, 40%);">+# nicely formatted so it can be parsed by a human reader.</span><br><span style="color: hsl(120, 100%, 40%);">+# This is useful</span><br><span style="color: hsl(120, 100%, 40%);">+# if you want to understand what is going on.</span><br><span style="color: hsl(120, 100%, 40%);">+# On the other hand, if this</span><br><span> # tag is set to NO the size of the Perl module output will be much smaller</span><br><span> # and Perl will parse it just the same.</span><br><span> </span><br><span>@@ -1215,7 +1596,7 @@</span><br><span> EXPAND_ONLY_PREDEF     = NO</span><br><span> </span><br><span> # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files</span><br><span style="color: hsl(0, 100%, 40%);">-# in the INCLUDE_PATH (see below) will be search if a #include is found.</span><br><span style="color: hsl(120, 100%, 40%);">+# pointed to by INCLUDE_PATH will be searched when a #include is found.</span><br><span> </span><br><span> SEARCH_INCLUDES        = YES</span><br><span> </span><br><span>@@ -1245,15 +1626,15 @@</span><br><span> # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then</span><br><span> # this tag can be used to specify a list of macro names that should be expanded.</span><br><span> # The macro definition that is found in the sources will be used.</span><br><span style="color: hsl(0, 100%, 40%);">-# Use the PREDEFINED tag if you want to use a different macro definition.</span><br><span style="color: hsl(120, 100%, 40%);">+# Use the PREDEFINED tag if you want to use a different macro definition that</span><br><span style="color: hsl(120, 100%, 40%);">+# overrules the definition found in the source code.</span><br><span> </span><br><span> EXPAND_AS_DEFINED      =</span><br><span> </span><br><span> # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen's preprocessor will remove all function-like macros that are alone</span><br><span style="color: hsl(0, 100%, 40%);">-# on a line, have an all uppercase name, and do not end with a semicolon. Such</span><br><span style="color: hsl(0, 100%, 40%);">-# function macros are typically used for boiler-plate code, and will confuse</span><br><span style="color: hsl(0, 100%, 40%);">-# the parser if not removed.</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen's preprocessor will remove all references to function-like macros</span><br><span style="color: hsl(120, 100%, 40%);">+# that are alone on a line, have an all uppercase name, and do not end with a</span><br><span style="color: hsl(120, 100%, 40%);">+# semicolon, because these will confuse the parser if not removed.</span><br><span> </span><br><span> SKIP_FUNCTION_MACROS   = YES</span><br><span> </span><br><span>@@ -1261,20 +1642,18 @@</span><br><span> # Configuration::additions related to external references</span><br><span> #---------------------------------------------------------------------------</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The TAGFILES option can be used to specify one or more tagfiles.</span><br><span style="color: hsl(0, 100%, 40%);">-# Optionally an initial location of the external documentation</span><br><span style="color: hsl(0, 100%, 40%);">-# can be added for each tagfile. The format of a tag file without</span><br><span style="color: hsl(0, 100%, 40%);">-# this location is as follows:</span><br><span style="color: hsl(0, 100%, 40%);">-#   TAGFILES = file1 file2 ...</span><br><span style="color: hsl(120, 100%, 40%);">+# The TAGFILES option can be used to specify one or more tagfiles. For each</span><br><span style="color: hsl(120, 100%, 40%);">+# tag file the location of the external documentation should be added. The</span><br><span style="color: hsl(120, 100%, 40%);">+# format of a tag file without this location is as follows:</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# TAGFILES = file1 file2 ...</span><br><span> # Adding location for the tag files is done as follows:</span><br><span style="color: hsl(0, 100%, 40%);">-#   TAGFILES = file1=loc1 "file2 = loc2" ...</span><br><span style="color: hsl(0, 100%, 40%);">-# where "loc1" and "loc2" can be relative or absolute paths or</span><br><span style="color: hsl(0, 100%, 40%);">-# URLs. If a location is present for each tag, the installdox tool</span><br><span style="color: hsl(0, 100%, 40%);">-# does not have to be run to correct the links.</span><br><span style="color: hsl(0, 100%, 40%);">-# Note that each tag file must have a unique name</span><br><span style="color: hsl(0, 100%, 40%);">-# (where the name does NOT include the path)</span><br><span style="color: hsl(0, 100%, 40%);">-# If a tag file is not located in the directory in which doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-# is run, you must also specify the path to the tagfile here.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# TAGFILES = file1=loc1 "file2 = loc2" ...</span><br><span style="color: hsl(120, 100%, 40%);">+# where "loc1" and "loc2" can be relative or absolute paths</span><br><span style="color: hsl(120, 100%, 40%);">+# or URLs. Note that each tag file must have a unique name (where the name does</span><br><span style="color: hsl(120, 100%, 40%);">+# NOT include the path). If a tag file is not located in the directory in which</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen is run, you must also specify the path to the tagfile here.</span><br><span> </span><br><span> TAGFILES               =</span><br><span> </span><br><span>@@ -1295,6 +1674,12 @@</span><br><span> </span><br><span> EXTERNAL_GROUPS        = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed</span><br><span style="color: hsl(120, 100%, 40%);">+# in the related pages index. If set to NO, only the current project's</span><br><span style="color: hsl(120, 100%, 40%);">+# pages will be listed.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTERNAL_PAGES         = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The PERL_PATH should be the absolute path and name of the perl script</span><br><span> # interpreter (i.e. the result of `which perl').</span><br><span> </span><br><span>@@ -1307,9 +1692,8 @@</span><br><span> # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will</span><br><span> # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base</span><br><span> # or super classes. Setting the tag to NO turns the diagrams off. Note that</span><br><span style="color: hsl(0, 100%, 40%);">-# this option is superseded by the HAVE_DOT option below. This is only a</span><br><span style="color: hsl(0, 100%, 40%);">-# fallback. It is recommended to install and use dot, since it yields more</span><br><span style="color: hsl(0, 100%, 40%);">-# powerful graphs.</span><br><span style="color: hsl(120, 100%, 40%);">+# this option also works with HAVE_DOT disabled, but it is recommended to</span><br><span style="color: hsl(120, 100%, 40%);">+# install and use dot, since it yields more powerful graphs.</span><br><span> </span><br><span> CLASS_DIAGRAMS         = YES</span><br><span> </span><br><span>@@ -1335,33 +1719,38 @@</span><br><span> </span><br><span> HAVE_DOT               = @HAVE_DOT@</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# By default doxygen will write a font called FreeSans.ttf to the output</span><br><span style="color: hsl(0, 100%, 40%);">-# directory and reference it in all dot files that doxygen generates. This</span><br><span style="color: hsl(0, 100%, 40%);">-# font does not include all possible unicode characters however, so when you need</span><br><span style="color: hsl(0, 100%, 40%);">-# these (or just want a differently looking font) you can specify the font name</span><br><span style="color: hsl(0, 100%, 40%);">-# using DOT_FONTNAME. You need need to make sure dot is able to find the font,</span><br><span style="color: hsl(0, 100%, 40%);">-# which can be done by putting it in a standard location or by setting the</span><br><span style="color: hsl(0, 100%, 40%);">-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory</span><br><span style="color: hsl(0, 100%, 40%);">-# containing the font.</span><br><span style="color: hsl(120, 100%, 40%);">+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is</span><br><span style="color: hsl(120, 100%, 40%);">+# allowed to run in parallel. When set to 0 (the default) doxygen will</span><br><span style="color: hsl(120, 100%, 40%);">+# base this on the number of processors available in the system. You can set it</span><br><span style="color: hsl(120, 100%, 40%);">+# explicitly to a value larger than 0 to get control over the balance</span><br><span style="color: hsl(120, 100%, 40%);">+# between CPU load and processing speed.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DOT_FONTNAME           = FreeSans</span><br><span style="color: hsl(120, 100%, 40%);">+DOT_NUM_THREADS        = 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# By default doxygen will use the Helvetica font for all dot files that</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen generates. When you want a differently looking font you can specify</span><br><span style="color: hsl(120, 100%, 40%);">+# the font name using DOT_FONTNAME. You need to make sure dot is able to find</span><br><span style="color: hsl(120, 100%, 40%);">+# the font, which can be done by putting it in a standard location or by setting</span><br><span style="color: hsl(120, 100%, 40%);">+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the</span><br><span style="color: hsl(120, 100%, 40%);">+# directory containing the font.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOT_FONTNAME           = Helvetica</span><br><span> </span><br><span> # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.</span><br><span> # The default size is 10pt.</span><br><span> </span><br><span> DOT_FONTSIZE           = 10</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# By default doxygen will tell dot to use the output directory to look for the</span><br><span style="color: hsl(0, 100%, 40%);">-# FreeSans.ttf font (which doxygen will put there itself). If you specify a</span><br><span style="color: hsl(0, 100%, 40%);">-# different font using DOT_FONTNAME you can set the path where dot</span><br><span style="color: hsl(0, 100%, 40%);">-# can find it using this tag.</span><br><span style="color: hsl(120, 100%, 40%);">+# By default doxygen will tell dot to use the Helvetica font.</span><br><span style="color: hsl(120, 100%, 40%);">+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to</span><br><span style="color: hsl(120, 100%, 40%);">+# set the path where dot can find it.</span><br><span> </span><br><span> DOT_FONTPATH           =</span><br><span> </span><br><span> # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen</span><br><span> # will generate a graph for each documented class showing the direct and</span><br><span> # indirect inheritance relations. Setting this tag to YES will force the</span><br><span style="color: hsl(0, 100%, 40%);">-# the CLASS_DIAGRAMS tag to NO.</span><br><span style="color: hsl(120, 100%, 40%);">+# CLASS_DIAGRAMS tag to NO.</span><br><span> </span><br><span> CLASS_GRAPH            = YES</span><br><span> </span><br><span>@@ -1383,6 +1772,15 @@</span><br><span> </span><br><span> UML_LOOK               = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the UML_LOOK tag is enabled, the fields and methods are shown inside</span><br><span style="color: hsl(120, 100%, 40%);">+# the class node. If there are many fields or methods and many nodes the</span><br><span style="color: hsl(120, 100%, 40%);">+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS</span><br><span style="color: hsl(120, 100%, 40%);">+# threshold limits the number of items for each type to make the size more</span><br><span style="color: hsl(120, 100%, 40%);">+# manageable. Set this to 0 for no limit. Note that the threshold may be</span><br><span style="color: hsl(120, 100%, 40%);">+# exceeded by 50% before the limit is enforced.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+UML_LIMIT_NUM_FIELDS   = 10</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If set to YES, the inheritance and collaboration graphs will show the</span><br><span> # relations between templates and their instances.</span><br><span> </span><br><span>@@ -1419,11 +1817,11 @@</span><br><span> CALLER_GRAPH           = NO</span><br><span> </span><br><span> # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-# will graphical hierarchy of all classes instead of a textual one.</span><br><span style="color: hsl(120, 100%, 40%);">+# will generate a graphical hierarchy of all classes instead of a textual one.</span><br><span> </span><br><span> GRAPHICAL_HIERARCHY    = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES</span><br><span style="color: hsl(120, 100%, 40%);">+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES</span><br><span> # then doxygen will show the dependencies a directory has on other directories</span><br><span> # in a graphical way. The dependency relations are determined by the #include</span><br><span> # relations between the files in the directories.</span><br><span>@@ -1431,11 +1829,22 @@</span><br><span> DIRECTORY_GRAPH        = YES</span><br><span> </span><br><span> # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images</span><br><span style="color: hsl(0, 100%, 40%);">-# generated by dot. Possible values are png, jpg, or gif</span><br><span style="color: hsl(0, 100%, 40%);">-# If left blank png will be used.</span><br><span style="color: hsl(120, 100%, 40%);">+# generated by dot. Possible values are svg, png, jpg, or gif.</span><br><span style="color: hsl(120, 100%, 40%);">+# If left blank png will be used. If you choose svg you need to set</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files</span><br><span style="color: hsl(120, 100%, 40%);">+# visible in IE 9+ (other browsers do not have this requirement).</span><br><span> </span><br><span> DOT_IMAGE_FORMAT       = png</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to</span><br><span style="color: hsl(120, 100%, 40%);">+# enable generation of interactive SVG images that allow zooming and panning.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that this requires a modern browser other than Internet Explorer.</span><br><span style="color: hsl(120, 100%, 40%);">+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you</span><br><span style="color: hsl(120, 100%, 40%);">+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files</span><br><span style="color: hsl(120, 100%, 40%);">+# visible. Older versions of IE do not have SVG support.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+INTERACTIVE_SVG        = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The tag DOT_PATH can be used to specify the path where the dot tool can be</span><br><span> # found. If left blank, it is assumed the dot tool can be found in the path.</span><br><span> </span><br><span>@@ -1447,6 +1856,12 @@</span><br><span> </span><br><span> DOTFILE_DIRS           =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The MSCFILE_DIRS tag can be used to specify one or more directories that</span><br><span style="color: hsl(120, 100%, 40%);">+# contain msc files that are included in the documentation (see the</span><br><span style="color: hsl(120, 100%, 40%);">+# \mscfile command).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MSCFILE_DIRS           =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of</span><br><span> # nodes that will be shown in the graph. If the number of nodes in a graph</span><br><span> # becomes larger than this value, doxygen will truncate the graph, which is</span><br><span>@@ -1493,12 +1908,3 @@</span><br><span> # the various graphs.</span><br><span> </span><br><span> DOT_CLEANUP            = YES</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#---------------------------------------------------------------------------</span><br><span style="color: hsl(0, 100%, 40%);">-# Configuration::additions related to the search engine</span><br><span style="color: hsl(0, 100%, 40%);">-#---------------------------------------------------------------------------</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# The SEARCHENGINE tag specifies whether or not a search engine should be</span><br><span style="color: hsl(0, 100%, 40%);">-# used. If set to NO the values of all tags below this one will be ignored.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-SEARCHENGINE           = NO</span><br><span>diff --git a/docs/doxygen/Doxyfile.swig_doc.in b/docs/doxygen/Doxyfile.swig_doc.in</span><br><span>index 50b8aa8..cbe06d6 100644</span><br><span>--- a/docs/doxygen/Doxyfile.swig_doc.in</span><br><span>+++ b/docs/doxygen/Doxyfile.swig_doc.in</span><br><span>@@ -1,14 +1,16 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Doxyfile 1.6.1</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxyfile 1.8.4</span><br><span> </span><br><span> # This file describes the settings to be used by the documentation system</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen (www.doxygen.org) for a project</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen (www.doxygen.org) for a project.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# All text after a hash (#) is considered a comment and will be ignored</span><br><span style="color: hsl(120, 100%, 40%);">+# All text after a double hash (##) is considered a comment and is placed</span><br><span style="color: hsl(120, 100%, 40%);">+# in front of the TAG it is preceding .</span><br><span style="color: hsl(120, 100%, 40%);">+# All text after a hash (#) is considered a comment and will be ignored.</span><br><span> # The format is:</span><br><span> #       TAG = value [value, ...]</span><br><span> # For lists items can also be appended using:</span><br><span> #       TAG += value [value, ...]</span><br><span style="color: hsl(0, 100%, 40%);">-# Values that contain spaces should be placed between quotes (" ")</span><br><span style="color: hsl(120, 100%, 40%);">+# Values that contain spaces should be placed between quotes (" ").</span><br><span> </span><br><span> #---------------------------------------------------------------------------</span><br><span> # Project related configuration options</span><br><span>@@ -22,8 +24,9 @@</span><br><span> </span><br><span> DOXYFILE_ENCODING      = UTF-8</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded</span><br><span style="color: hsl(0, 100%, 40%);">-# by quotes) that should identify the project.</span><br><span style="color: hsl(120, 100%, 40%);">+# The PROJECT_NAME tag is a single word (or sequence of words) that should</span><br><span style="color: hsl(120, 100%, 40%);">+# identify the project. Note that if you do not use Doxywizard you need</span><br><span style="color: hsl(120, 100%, 40%);">+# to put quotes around the project name if it contains spaces.</span><br><span> </span><br><span> PROJECT_NAME           = @CPACK_PACKAGE_NAME@</span><br><span> </span><br><span>@@ -33,12 +36,25 @@</span><br><span> </span><br><span> PROJECT_NUMBER         = @CPACK_PACKAGE_VERSION@</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# Using the PROJECT_BRIEF tag one can provide an optional one line description</span><br><span style="color: hsl(120, 100%, 40%);">+# for a project that appears at the top of each page and should give viewer</span><br><span style="color: hsl(120, 100%, 40%);">+# a quick idea about the purpose of the project. Keep the description short.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+PROJECT_BRIEF          =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# With the PROJECT_LOGO tag one can specify an logo or icon that is</span><br><span style="color: hsl(120, 100%, 40%);">+# included in the documentation. The maximum height of the logo should not</span><br><span style="color: hsl(120, 100%, 40%);">+# exceed 55 pixels and the maximum width should not exceed 200 pixels.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen will copy the logo to the output directory.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+PROJECT_LOGO           =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)</span><br><span> # base path where the generated documentation will be put.</span><br><span> # If a relative path is entered, it will be relative to the location</span><br><span> # where doxygen was started. If left blank the current directory will be used.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-OUTPUT_DIRECTORY       = @OUTPUT_DIRECTORY@</span><br><span style="color: hsl(120, 100%, 40%);">+OUTPUT_DIRECTORY       = "@OUTPUT_DIRECTORY@"</span><br><span> </span><br><span> # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create</span><br><span> # 4096 sub-directories (in 2 levels) under the output directory of each output</span><br><span>@@ -56,9 +72,9 @@</span><br><span> # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,</span><br><span> # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,</span><br><span> # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English</span><br><span style="color: hsl(0, 100%, 40%);">-# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,</span><br><span style="color: hsl(0, 100%, 40%);">-# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,</span><br><span style="color: hsl(0, 100%, 40%);">-# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.</span><br><span style="color: hsl(120, 100%, 40%);">+# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian,</span><br><span style="color: hsl(120, 100%, 40%);">+# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic,</span><br><span style="color: hsl(120, 100%, 40%);">+# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.</span><br><span> </span><br><span> OUTPUT_LANGUAGE        = English</span><br><span> </span><br><span>@@ -105,14 +121,16 @@</span><br><span> # path before files name in the file list and in the header files. If set</span><br><span> # to NO the shortest path that makes the file name unique will be used.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-FULL_PATH_NAMES        = YES</span><br><span style="color: hsl(120, 100%, 40%);">+FULL_PATH_NAMES        = NO</span><br><span> </span><br><span> # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag</span><br><span> # can be used to strip a user-defined part of the path. Stripping is</span><br><span> # only done if one of the specified strings matches the left-hand part of</span><br><span> # the path. The tag can be used to show relative paths in the file list.</span><br><span> # If left blank the directory from which doxygen is run is used as the</span><br><span style="color: hsl(0, 100%, 40%);">-# path to strip.</span><br><span style="color: hsl(120, 100%, 40%);">+# path to strip. Note that you specify absolute paths here, but also</span><br><span style="color: hsl(120, 100%, 40%);">+# relative paths, which will be relative from the directory where doxygen is</span><br><span style="color: hsl(120, 100%, 40%);">+# started.</span><br><span> </span><br><span> STRIP_FROM_PATH        =</span><br><span> </span><br><span>@@ -126,7 +144,7 @@</span><br><span> STRIP_FROM_INC_PATH    =</span><br><span> </span><br><span> # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter</span><br><span style="color: hsl(0, 100%, 40%);">-# (but less readable) file names. This can be useful is your file systems</span><br><span style="color: hsl(120, 100%, 40%);">+# (but less readable) file names. This can be useful if your file system</span><br><span> # doesn't support long names like on DOS, Mac, or CD-ROM.</span><br><span> </span><br><span> SHORT_NAMES            = NO</span><br><span>@@ -181,6 +199,13 @@</span><br><span> </span><br><span> ALIASES                =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# This tag can be used to specify a number of word-keyword mappings (TCL only).</span><br><span style="color: hsl(120, 100%, 40%);">+# A mapping has the form "name=value". For example adding</span><br><span style="color: hsl(120, 100%, 40%);">+# "class=itcl::class" will allow you to use the command class in the</span><br><span style="color: hsl(120, 100%, 40%);">+# itcl::class meaning.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+TCL_SUBST              =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C</span><br><span> # sources only. Doxygen will then generate output that is more tailored for C.</span><br><span> # For instance, some of the names that are used will be different. The list</span><br><span>@@ -207,22 +232,40 @@</span><br><span> </span><br><span> OPTIMIZE_OUTPUT_VHDL   = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# Doxygen selects the parser to use depending on the extension of the files it parses.</span><br><span style="color: hsl(0, 100%, 40%);">-# With this tag you can assign which parser to use for a given extension.</span><br><span style="color: hsl(0, 100%, 40%);">-# Doxygen has a built-in mapping, but you can override or extend it using this tag.</span><br><span style="color: hsl(0, 100%, 40%);">-# The format is ext=language, where ext is a file extension, and language is one of</span><br><span style="color: hsl(0, 100%, 40%);">-# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,</span><br><span style="color: hsl(0, 100%, 40%);">-# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat</span><br><span style="color: hsl(0, 100%, 40%);">-# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),</span><br><span style="color: hsl(0, 100%, 40%);">-# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen selects the parser to use depending on the extension of the files it</span><br><span style="color: hsl(120, 100%, 40%);">+# parses. With this tag you can assign which parser to use for a given</span><br><span style="color: hsl(120, 100%, 40%);">+# extension. Doxygen has a built-in mapping, but you can override or extend it</span><br><span style="color: hsl(120, 100%, 40%);">+# using this tag. The format is ext=language, where ext is a file extension,</span><br><span style="color: hsl(120, 100%, 40%);">+# and language is one of the parsers supported by doxygen: IDL, Java,</span><br><span style="color: hsl(120, 100%, 40%);">+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,</span><br><span style="color: hsl(120, 100%, 40%);">+# C++. For instance to make doxygen treat .inc files as Fortran files (default</span><br><span style="color: hsl(120, 100%, 40%);">+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note</span><br><span style="color: hsl(120, 100%, 40%);">+# that for custom extensions you also need to set FILE_PATTERNS otherwise the</span><br><span style="color: hsl(120, 100%, 40%);">+# files are not read by doxygen.</span><br><span> </span><br><span> EXTENSION_MAPPING      =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all</span><br><span style="color: hsl(120, 100%, 40%);">+# comments according to the Markdown format, which allows for more readable</span><br><span style="color: hsl(120, 100%, 40%);">+# documentation. See http://daringfireball.net/projects/markdown/ for details.</span><br><span style="color: hsl(120, 100%, 40%);">+# The output of markdown processing is further processed by doxygen, so you</span><br><span style="color: hsl(120, 100%, 40%);">+# can mix doxygen, HTML, and XML commands with Markdown formatting.</span><br><span style="color: hsl(120, 100%, 40%);">+# Disable only in case of backward compatibilities issues.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MARKDOWN_SUPPORT       = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When enabled doxygen tries to link words that correspond to documented</span><br><span style="color: hsl(120, 100%, 40%);">+# classes, or namespaces to their corresponding documentation. Such a link can</span><br><span style="color: hsl(120, 100%, 40%);">+# be prevented in individual cases by by putting a % sign in front of the word</span><br><span style="color: hsl(120, 100%, 40%);">+# or globally by setting AUTOLINK_SUPPORT to NO.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AUTOLINK_SUPPORT       = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want</span><br><span> # to include (a tag file for) the STL sources as input, then you should</span><br><span> # set this tag to YES in order to let doxygen match functions declarations and</span><br><span> # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.</span><br><span style="color: hsl(0, 100%, 40%);">-# func(std::string) {}). This also make the inheritance and collaboration</span><br><span style="color: hsl(120, 100%, 40%);">+# func(std::string) {}). This also makes the inheritance and collaboration</span><br><span> # diagrams that involve STL classes more complete and accurate.</span><br><span> </span><br><span> BUILTIN_STL_SUPPORT    = YES</span><br><span>@@ -238,10 +281,10 @@</span><br><span> </span><br><span> SIP_SUPPORT            = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# For Microsoft's IDL there are propget and propput attributes to indicate getter</span><br><span style="color: hsl(0, 100%, 40%);">-# and setter methods for a property. Setting this option to YES (the default)</span><br><span style="color: hsl(0, 100%, 40%);">-# will make doxygen to replace the get and set methods by a property in the</span><br><span style="color: hsl(0, 100%, 40%);">-# documentation. This will only work if the methods are indeed getting or</span><br><span style="color: hsl(120, 100%, 40%);">+# For Microsoft's IDL there are propget and propput attributes to indicate</span><br><span style="color: hsl(120, 100%, 40%);">+# getter and setter methods for a property. Setting this option to YES (the</span><br><span style="color: hsl(120, 100%, 40%);">+# default) will make doxygen replace the get and set methods by a property in</span><br><span style="color: hsl(120, 100%, 40%);">+# the documentation. This will only work if the methods are indeed getting or</span><br><span> # setting a simple type. If this is not the case, or you want to show the</span><br><span> # methods anyway, you should set this option to NO.</span><br><span> </span><br><span>@@ -262,6 +305,22 @@</span><br><span> </span><br><span> SUBGROUPING            = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and</span><br><span style="color: hsl(120, 100%, 40%);">+# unions are shown inside the group in which they are included (e.g. using</span><br><span style="color: hsl(120, 100%, 40%);">+# @ingroup) instead of on a separate page (for HTML and Man pages) or</span><br><span style="color: hsl(120, 100%, 40%);">+# section (for LaTeX and RTF).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+INLINE_GROUPED_CLASSES = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and</span><br><span style="color: hsl(120, 100%, 40%);">+# unions with only public data fields or simple typedef fields will be shown</span><br><span style="color: hsl(120, 100%, 40%);">+# inline in the documentation of the scope in which they are defined (i.e. file,</span><br><span style="color: hsl(120, 100%, 40%);">+# namespace, or group documentation), provided this scope is documented. If set</span><br><span style="color: hsl(120, 100%, 40%);">+# to NO (the default), structs, classes, and unions are shown on a separate</span><br><span style="color: hsl(120, 100%, 40%);">+# page (for HTML and Man pages) or section (for LaTeX and RTF).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+INLINE_SIMPLE_STRUCTS  = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum</span><br><span> # is documented as struct, union, or enum with the name of the typedef. So</span><br><span> # typedef struct TypeS {} TypeT, will appear in the documentation as a struct</span><br><span>@@ -272,21 +331,16 @@</span><br><span> </span><br><span> TYPEDEF_HIDES_STRUCT   = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to</span><br><span style="color: hsl(0, 100%, 40%);">-# determine which symbols to keep in memory and which to flush to disk.</span><br><span style="color: hsl(0, 100%, 40%);">-# When the cache is full, less often used symbols will be written to disk.</span><br><span style="color: hsl(0, 100%, 40%);">-# For small to medium size projects (<1000 input files) the default value is</span><br><span style="color: hsl(0, 100%, 40%);">-# probably good enough. For larger projects a too small cache size can cause</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen to be busy swapping symbols to and from disk most of the time</span><br><span style="color: hsl(0, 100%, 40%);">-# causing a significant performance penality.</span><br><span style="color: hsl(0, 100%, 40%);">-# If the system has enough physical memory increasing the cache will improve the</span><br><span style="color: hsl(0, 100%, 40%);">-# performance by keeping more symbols in memory. Note that the value works on</span><br><span style="color: hsl(0, 100%, 40%);">-# a logarithmic scale so increasing the size by one will rougly double the</span><br><span style="color: hsl(0, 100%, 40%);">-# memory usage. The cache size is given by this formula:</span><br><span style="color: hsl(0, 100%, 40%);">-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,</span><br><span style="color: hsl(0, 100%, 40%);">-# corresponding to a cache size of 2^16 = 65536 symbols</span><br><span style="color: hsl(120, 100%, 40%);">+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This</span><br><span style="color: hsl(120, 100%, 40%);">+# cache is used to resolve symbols given their name and scope. Since this can</span><br><span style="color: hsl(120, 100%, 40%);">+# be an expensive process and often the same symbol appear multiple times in</span><br><span style="color: hsl(120, 100%, 40%);">+# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too</span><br><span style="color: hsl(120, 100%, 40%);">+# small doxygen will become slower. If the cache is too large, memory is wasted.</span><br><span style="color: hsl(120, 100%, 40%);">+# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid</span><br><span style="color: hsl(120, 100%, 40%);">+# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536</span><br><span style="color: hsl(120, 100%, 40%);">+# symbols.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-SYMBOL_CACHE_SIZE      = 0</span><br><span style="color: hsl(120, 100%, 40%);">+LOOKUP_CACHE_SIZE      = 0</span><br><span> </span><br><span> #---------------------------------------------------------------------------</span><br><span> # Build related configuration options</span><br><span>@@ -295,7 +349,7 @@</span><br><span> # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in</span><br><span> # documentation are documented, even if no documentation was available.</span><br><span> # Private class members and static file members will be hidden unless</span><br><span style="color: hsl(0, 100%, 40%);">-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES</span><br><span style="color: hsl(120, 100%, 40%);">+# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES</span><br><span> </span><br><span> EXTRACT_ALL            = YES</span><br><span> </span><br><span>@@ -304,6 +358,11 @@</span><br><span> </span><br><span> EXTRACT_PRIVATE        = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal</span><br><span style="color: hsl(120, 100%, 40%);">+# scope will be included in the documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRACT_PACKAGE        = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the EXTRACT_STATIC tag is set to YES all static members of a file</span><br><span> # will be included in the documentation.</span><br><span> </span><br><span>@@ -326,7 +385,7 @@</span><br><span> # extracted and appear in the documentation as a namespace called</span><br><span> # 'anonymous_namespace{file}', where file will be replaced with the base</span><br><span> # name of the file that contains the anonymous namespace. By default</span><br><span style="color: hsl(0, 100%, 40%);">-# anonymous namespace are hidden.</span><br><span style="color: hsl(120, 100%, 40%);">+# anonymous namespaces are hidden.</span><br><span> </span><br><span> EXTRACT_ANON_NSPACES   = NO</span><br><span> </span><br><span>@@ -386,6 +445,12 @@</span><br><span> </span><br><span> SHOW_INCLUDE_FILES     = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# will list include files with double quotes in the documentation</span><br><span style="color: hsl(120, 100%, 40%);">+# rather than with sharp brackets.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FORCE_LOCAL_INCLUDES   = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]</span><br><span> # is inserted in the documentation for inline members.</span><br><span> </span><br><span>@@ -405,7 +470,13 @@</span><br><span> </span><br><span> SORT_BRIEF_DOCS        = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.</span><br><span style="color: hsl(120, 100%, 40%);">+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# will sort the (brief and detailed) documentation of class members so that</span><br><span style="color: hsl(120, 100%, 40%);">+# constructors and destructors are listed first. If set to NO (the default)</span><br><span style="color: hsl(120, 100%, 40%);">+# the constructors will appear in the respective orders defined by</span><br><span style="color: hsl(120, 100%, 40%);">+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.</span><br><span style="color: hsl(120, 100%, 40%);">+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO</span><br><span style="color: hsl(120, 100%, 40%);">+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.</span><br><span> </span><br><span> SORT_MEMBERS_CTORS_1ST = NO</span><br><span> </span><br><span>@@ -425,6 +496,15 @@</span><br><span> </span><br><span> SORT_BY_SCOPE_NAME     = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to</span><br><span style="color: hsl(120, 100%, 40%);">+# do proper type resolution of all parameters of a function it will reject a</span><br><span style="color: hsl(120, 100%, 40%);">+# match between the prototype and the implementation of a member function even</span><br><span style="color: hsl(120, 100%, 40%);">+# if there is only one candidate or it is obvious which candidate to choose</span><br><span style="color: hsl(120, 100%, 40%);">+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# will still accept a match between prototype and implementation in such cases.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+STRICT_PROTO_MATCHING  = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The GENERATE_TODOLIST tag can be used to enable (YES) or</span><br><span> # disable (NO) the todo list. This list is created by putting \todo</span><br><span> # commands in the documentation.</span><br><span>@@ -450,15 +530,16 @@</span><br><span> GENERATE_DEPRECATEDLIST= YES</span><br><span> </span><br><span> # The ENABLED_SECTIONS tag can be used to enable conditional</span><br><span style="color: hsl(0, 100%, 40%);">-# documentation sections, marked by \if sectionname ... \endif.</span><br><span style="color: hsl(120, 100%, 40%);">+# documentation sections, marked by \if section-label ... \endif</span><br><span style="color: hsl(120, 100%, 40%);">+# and \cond section-label ... \endcond blocks.</span><br><span> </span><br><span> ENABLED_SECTIONS       =</span><br><span> </span><br><span> # The MAX_INITIALIZER_LINES tag determines the maximum number of lines</span><br><span style="color: hsl(0, 100%, 40%);">-# the initial value of a variable or define consists of for it to appear in</span><br><span style="color: hsl(120, 100%, 40%);">+# the initial value of a variable or macro consists of for it to appear in</span><br><span> # the documentation. If the initializer consists of more lines than specified</span><br><span> # here it will be hidden. Use a value of 0 to hide initializers completely.</span><br><span style="color: hsl(0, 100%, 40%);">-# The appearance of the initializer of individual variables and defines in the</span><br><span style="color: hsl(120, 100%, 40%);">+# The appearance of the initializer of individual variables and macros in the</span><br><span> # documentation can be controlled using \showinitializer or \hideinitializer</span><br><span> # command in the documentation regardless of this setting.</span><br><span> </span><br><span>@@ -470,12 +551,6 @@</span><br><span> </span><br><span> SHOW_USED_FILES        = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the sources in your project are distributed over multiple directories</span><br><span style="color: hsl(0, 100%, 40%);">-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy</span><br><span style="color: hsl(0, 100%, 40%);">-# in the documentation. The default is NO.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-SHOW_DIRECTORIES       = NO</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> # Set the SHOW_FILES tag to NO to disable the generation of the Files page.</span><br><span> # This will remove the Files entry from the Quick Index and from the</span><br><span> # Folder Tree View (if specified). The default is YES.</span><br><span>@@ -499,15 +574,26 @@</span><br><span> </span><br><span> FILE_VERSION_FILTER    =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen. The layout file controls the global structure of the generated output files</span><br><span style="color: hsl(0, 100%, 40%);">-# in an output format independent way. The create the layout file that represents</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a</span><br><span style="color: hsl(0, 100%, 40%);">-# file name after the option, if omitted DoxygenLayout.xml will be used as the name</span><br><span style="color: hsl(0, 100%, 40%);">-# of the layout file.</span><br><span style="color: hsl(120, 100%, 40%);">+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed</span><br><span style="color: hsl(120, 100%, 40%);">+# by doxygen. The layout file controls the global structure of the generated</span><br><span style="color: hsl(120, 100%, 40%);">+# output files in an output format independent way. To create the layout file</span><br><span style="color: hsl(120, 100%, 40%);">+# that represents doxygen's defaults, run doxygen with the -l option.</span><br><span style="color: hsl(120, 100%, 40%);">+# You can optionally specify a file name after the option, if omitted</span><br><span style="color: hsl(120, 100%, 40%);">+# DoxygenLayout.xml will be used as the name of the layout file.</span><br><span> </span><br><span> LAYOUT_FILE            =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The CITE_BIB_FILES tag can be used to specify one or more bib files</span><br><span style="color: hsl(120, 100%, 40%);">+# containing the references data. This must be a list of .bib files. The</span><br><span style="color: hsl(120, 100%, 40%);">+# .bib extension is automatically appended if omitted. Using this command</span><br><span style="color: hsl(120, 100%, 40%);">+# requires the bibtex tool to be installed. See also</span><br><span style="color: hsl(120, 100%, 40%);">+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style</span><br><span style="color: hsl(120, 100%, 40%);">+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this</span><br><span style="color: hsl(120, 100%, 40%);">+# feature you need bibtex and perl available in the search path. Do not use</span><br><span style="color: hsl(120, 100%, 40%);">+# file names with spaces, bibtex cannot handle them.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+CITE_BIB_FILES         =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to warning and progress messages</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -536,7 +622,7 @@</span><br><span> </span><br><span> WARN_IF_DOC_ERROR      = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# This WARN_NO_PARAMDOC option can be abled to get warnings for</span><br><span style="color: hsl(120, 100%, 40%);">+# The WARN_NO_PARAMDOC option can be enabled to get warnings for</span><br><span> # functions that are documented, but have no documentation for their parameters</span><br><span> # or return value. If set to NO (the default) doxygen will only warn about</span><br><span> # wrong or incomplete parameter documentation, but not about the absence of</span><br><span>@@ -582,8 +668,9 @@</span><br><span> # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp</span><br><span> # and *.h) to filter out the source-files in the directories. If left</span><br><span> # blank the following patterns are tested:</span><br><span style="color: hsl(0, 100%, 40%);">-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx</span><br><span style="color: hsl(0, 100%, 40%);">-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90</span><br><span style="color: hsl(120, 100%, 40%);">+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh</span><br><span style="color: hsl(120, 100%, 40%);">+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py</span><br><span style="color: hsl(120, 100%, 40%);">+# *.f90 *.f *.for *.vhd *.vhdl</span><br><span> </span><br><span> FILE_PATTERNS          = *.h</span><br><span> </span><br><span>@@ -593,14 +680,16 @@</span><br><span> </span><br><span> RECURSIVE              = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The EXCLUDE tag can be used to specify files and/or directories that should</span><br><span style="color: hsl(120, 100%, 40%);">+# The EXCLUDE tag can be used to specify files and/or directories that should be</span><br><span> # excluded from the INPUT source files. This way you can easily exclude a</span><br><span> # subdirectory from a directory tree whose root is specified with the INPUT tag.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that relative paths are relative to the directory from which doxygen is</span><br><span style="color: hsl(120, 100%, 40%);">+# run.</span><br><span> </span><br><span> EXCLUDE                =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or</span><br><span style="color: hsl(0, 100%, 40%);">-# directories that are symbolic links (a Unix filesystem feature) are excluded</span><br><span style="color: hsl(120, 100%, 40%);">+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or</span><br><span style="color: hsl(120, 100%, 40%);">+# directories that are symbolic links (a Unix file system feature) are excluded</span><br><span> # from the input.</span><br><span> </span><br><span> EXCLUDE_SYMLINKS       = NO</span><br><span>@@ -653,8 +742,10 @@</span><br><span> # is the value of the INPUT_FILTER tag, and <input-file> is the name of an</span><br><span> # input file. Doxygen will then use the output that the filter program writes</span><br><span> # to standard output.</span><br><span style="color: hsl(0, 100%, 40%);">-# If FILTER_PATTERNS is specified, this tag will be</span><br><span style="color: hsl(0, 100%, 40%);">-# ignored.</span><br><span style="color: hsl(120, 100%, 40%);">+# If FILTER_PATTERNS is specified, this tag will be ignored.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that the filter must not add or remove lines; it is applied before the</span><br><span style="color: hsl(120, 100%, 40%);">+# code is scanned, but not when the output code is generated. If lines are added</span><br><span style="color: hsl(120, 100%, 40%);">+# or removed, the anchors will not be placed correctly.</span><br><span> </span><br><span> INPUT_FILTER           =</span><br><span> </span><br><span>@@ -664,8 +755,8 @@</span><br><span> # filter if there is a match.</span><br><span> # The filters are a list of the form:</span><br><span> # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further</span><br><span style="color: hsl(0, 100%, 40%);">-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER</span><br><span style="color: hsl(0, 100%, 40%);">-# is applied to all files.</span><br><span style="color: hsl(120, 100%, 40%);">+# info on how filters are used. If FILTER_PATTERNS is empty or if</span><br><span style="color: hsl(120, 100%, 40%);">+# non of the patterns match the file name, INPUT_FILTER is applied.</span><br><span> </span><br><span> FILTER_PATTERNS        =</span><br><span> </span><br><span>@@ -675,6 +766,21 @@</span><br><span> </span><br><span> FILTER_SOURCE_FILES    = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file</span><br><span style="color: hsl(120, 100%, 40%);">+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)</span><br><span style="color: hsl(120, 100%, 40%);">+# and it is also possible to disable source filtering for a specific pattern</span><br><span style="color: hsl(120, 100%, 40%);">+# using *.ext= (so without naming a filter). This option only has effect when</span><br><span style="color: hsl(120, 100%, 40%);">+# FILTER_SOURCE_FILES is enabled.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FILTER_SOURCE_PATTERNS =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that</span><br><span style="color: hsl(120, 100%, 40%);">+# is part of the input, its contents will be placed on the main page</span><br><span style="color: hsl(120, 100%, 40%);">+# (index.html). This can be useful if you have a project on for instance GitHub</span><br><span style="color: hsl(120, 100%, 40%);">+# and want reuse the introduction page also for the doxygen output.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+USE_MDFILE_AS_MAINPAGE =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to source browsing</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -693,7 +799,7 @@</span><br><span> </span><br><span> # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct</span><br><span> # doxygen to hide any special comment blocks from generated source code</span><br><span style="color: hsl(0, 100%, 40%);">-# fragments. Normal C and C++ comments will always remain visible.</span><br><span style="color: hsl(120, 100%, 40%);">+# fragments. Normal C, C++ and Fortran comments will always remain visible.</span><br><span> </span><br><span> STRIP_CODE_COMMENTS    = YES</span><br><span> </span><br><span>@@ -777,7 +883,14 @@</span><br><span> </span><br><span> # The HTML_HEADER tag can be used to specify a personal HTML header for</span><br><span> # each generated HTML page. If it is left blank doxygen will generate a</span><br><span style="color: hsl(0, 100%, 40%);">-# standard header.</span><br><span style="color: hsl(120, 100%, 40%);">+# standard header. Note that when using a custom header you are responsible</span><br><span style="color: hsl(120, 100%, 40%);">+#  for the proper inclusion of any scripts and style sheets that doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# needs, which is dependent on the configuration options used.</span><br><span style="color: hsl(120, 100%, 40%);">+# It is advised to generate a default header using "doxygen -w html</span><br><span style="color: hsl(120, 100%, 40%);">+# header.html footer.html stylesheet.css YourConfigFile" and then modify</span><br><span style="color: hsl(120, 100%, 40%);">+# that header. Note that the header is subject to change so you typically</span><br><span style="color: hsl(120, 100%, 40%);">+# have to redo this when upgrading to a newer version of doxygen or when</span><br><span style="color: hsl(120, 100%, 40%);">+# changing the value of configuration settings such as GENERATE_TREEVIEW!</span><br><span> </span><br><span> HTML_HEADER            =</span><br><span> </span><br><span>@@ -789,27 +902,80 @@</span><br><span> </span><br><span> # The HTML_STYLESHEET tag can be used to specify a user-defined cascading</span><br><span> # style sheet that is used by each HTML page. It can be used to</span><br><span style="color: hsl(0, 100%, 40%);">-# fine-tune the look of the HTML output. If the tag is left blank doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-# will generate a default style sheet. Note that doxygen will try to copy</span><br><span style="color: hsl(0, 100%, 40%);">-# the style sheet file to the HTML output directory, so don't put your own</span><br><span style="color: hsl(0, 100%, 40%);">-# stylesheet in the HTML output directory as well, or it will be erased!</span><br><span style="color: hsl(120, 100%, 40%);">+# fine-tune the look of the HTML output. If left blank doxygen will</span><br><span style="color: hsl(120, 100%, 40%);">+# generate a default style sheet. Note that it is recommended to use</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this</span><br><span style="color: hsl(120, 100%, 40%);">+# tag will in the future become obsolete.</span><br><span> </span><br><span> HTML_STYLESHEET        =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,</span><br><span style="color: hsl(0, 100%, 40%);">-# files or namespaces will be aligned in HTML using tables. If set to</span><br><span style="color: hsl(0, 100%, 40%);">-# NO a bullet list will be used.</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional</span><br><span style="color: hsl(120, 100%, 40%);">+# user-defined cascading style sheet that is included after the standard</span><br><span style="color: hsl(120, 100%, 40%);">+# style sheets created by doxygen. Using this option one can overrule</span><br><span style="color: hsl(120, 100%, 40%);">+# certain style aspects. This is preferred over using HTML_STYLESHEET</span><br><span style="color: hsl(120, 100%, 40%);">+# since it does not replace the standard style sheet and is therefore more</span><br><span style="color: hsl(120, 100%, 40%);">+# robust against future updates. Doxygen will copy the style sheet file to</span><br><span style="color: hsl(120, 100%, 40%);">+# the output directory.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-HTML_ALIGN_MEMBERS     = YES</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_EXTRA_STYLESHEET  =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or</span><br><span style="color: hsl(120, 100%, 40%);">+# other source files which should be copied to the HTML output directory. Note</span><br><span style="color: hsl(120, 100%, 40%);">+# that these files will be copied to the base HTML output directory. Use the</span><br><span style="color: hsl(120, 100%, 40%);">+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these</span><br><span style="color: hsl(120, 100%, 40%);">+# files. In the HTML_STYLESHEET file, use the file name only. Also note that</span><br><span style="color: hsl(120, 100%, 40%);">+# the files will be copied as-is; there are no commands or markers available.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_EXTRA_FILES       =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen will adjust the colors in the style sheet and background images</span><br><span style="color: hsl(120, 100%, 40%);">+# according to this color. Hue is specified as an angle on a colorwheel,</span><br><span style="color: hsl(120, 100%, 40%);">+# see http://en.wikipedia.org/wiki/Hue for more information.</span><br><span style="color: hsl(120, 100%, 40%);">+# For instance the value 0 represents red, 60 is yellow, 120 is green,</span><br><span style="color: hsl(120, 100%, 40%);">+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.</span><br><span style="color: hsl(120, 100%, 40%);">+# The allowed range is 0 to 359.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_COLORSTYLE_HUE    = 220</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of</span><br><span style="color: hsl(120, 100%, 40%);">+# the colors in the HTML output. For a value of 0 the output will use</span><br><span style="color: hsl(120, 100%, 40%);">+# grayscales only. A value of 255 will produce the most vivid colors.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_COLORSTYLE_SAT    = 100</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to</span><br><span style="color: hsl(120, 100%, 40%);">+# the luminance component of the colors in the HTML output. Values below</span><br><span style="color: hsl(120, 100%, 40%);">+# 100 gradually make the output lighter, whereas values above 100 make</span><br><span style="color: hsl(120, 100%, 40%);">+# the output darker. The value divided by 100 is the actual gamma applied,</span><br><span style="color: hsl(120, 100%, 40%);">+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,</span><br><span style="color: hsl(120, 100%, 40%);">+# and 100 does not change the gamma.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_COLORSTYLE_GAMMA  = 80</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML</span><br><span style="color: hsl(120, 100%, 40%);">+# page will contain the date and time when the page was generated. Setting</span><br><span style="color: hsl(120, 100%, 40%);">+# this to NO can help when comparing the output of multiple runs.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_TIMESTAMP         = NO</span><br><span> </span><br><span> # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML</span><br><span> # documentation will contain sections that can be hidden and shown after the</span><br><span style="color: hsl(0, 100%, 40%);">-# page has loaded. For this to work a browser that supports</span><br><span style="color: hsl(0, 100%, 40%);">-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox</span><br><span style="color: hsl(0, 100%, 40%);">-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).</span><br><span style="color: hsl(120, 100%, 40%);">+# page has loaded.</span><br><span> </span><br><span> HTML_DYNAMIC_SECTIONS  = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of</span><br><span style="color: hsl(120, 100%, 40%);">+# entries shown in the various tree structured indices initially; the user</span><br><span style="color: hsl(120, 100%, 40%);">+# can expand and collapse entries dynamically later on. Doxygen will expand</span><br><span style="color: hsl(120, 100%, 40%);">+# the tree to such a level that at most the specified number of entries are</span><br><span style="color: hsl(120, 100%, 40%);">+# visible (unless a fully collapsed tree already exceeds this amount).</span><br><span style="color: hsl(120, 100%, 40%);">+# So setting the number of entries 1 will produce a full collapsed tree by</span><br><span style="color: hsl(120, 100%, 40%);">+# default. 0 is a special value representing an infinite number of entries</span><br><span style="color: hsl(120, 100%, 40%);">+# and will result in a full expanded tree by default.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+HTML_INDEX_NUM_ENTRIES = 100</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the GENERATE_DOCSET tag is set to YES, additional index files</span><br><span> # will be generated that can be used as input for Apple's Xcode 3</span><br><span> # integrated development environment, introduced with OSX 10.5 (Leopard).</span><br><span>@@ -818,7 +984,8 @@</span><br><span> # directory and running "make install" will install the docset in</span><br><span> # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find</span><br><span> # it at startup.</span><br><span style="color: hsl(0, 100%, 40%);">-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.</span><br><span style="color: hsl(120, 100%, 40%);">+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html</span><br><span style="color: hsl(120, 100%, 40%);">+# for more information.</span><br><span> </span><br><span> GENERATE_DOCSET        = NO</span><br><span> </span><br><span>@@ -836,6 +1003,16 @@</span><br><span> </span><br><span> DOCSET_BUNDLE_ID       = org.doxygen.Project</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely</span><br><span style="color: hsl(120, 100%, 40%);">+# identify the documentation publisher. This should be a reverse domain-name</span><br><span style="color: hsl(120, 100%, 40%);">+# style string, e.g. com.mycompany.MyDocSet.documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOCSET_PUBLISHER_NAME  = Publisher</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the GENERATE_HTMLHELP tag is set to YES, additional index files</span><br><span> # will be generated that can be used as input for tools like the</span><br><span> # Microsoft HTML help workshop to generate a compiled HTML help file (.chm)</span><br><span>@@ -880,10 +1057,10 @@</span><br><span> </span><br><span> TOC_EXPAND             = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER</span><br><span style="color: hsl(0, 100%, 40%);">-# are set, an additional index file will be generated that can be used as input for</span><br><span style="color: hsl(0, 100%, 40%);">-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated</span><br><span style="color: hsl(0, 100%, 40%);">-# HTML documentation.</span><br><span style="color: hsl(120, 100%, 40%);">+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and</span><br><span style="color: hsl(120, 100%, 40%);">+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated</span><br><span style="color: hsl(120, 100%, 40%);">+# that can be used as input for Qt's qhelpgenerator to generate a</span><br><span style="color: hsl(120, 100%, 40%);">+# Qt Compressed Help (.qch) of the generated HTML documentation.</span><br><span> </span><br><span> GENERATE_QHP           = NO</span><br><span> </span><br><span>@@ -905,20 +1082,24 @@</span><br><span> </span><br><span> QHP_VIRTUAL_FOLDER     = doc</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.</span><br><span style="color: hsl(0, 100%, 40%);">-# For more information please see</span><br><span style="color: hsl(120, 100%, 40%);">+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to</span><br><span style="color: hsl(120, 100%, 40%);">+# add. For more information please see</span><br><span> # http://doc.trolltech.com/qthelpproject.html#custom-filters</span><br><span> </span><br><span> QHP_CUST_FILTER_NAME   =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see</span><br><span style="color: hsl(0, 100%, 40%);">-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.</span><br><span style="color: hsl(120, 100%, 40%);">+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the</span><br><span style="color: hsl(120, 100%, 40%);">+# custom filter to add. For more information please see</span><br><span style="color: hsl(120, 100%, 40%);">+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters"></span><br><span style="color: hsl(120, 100%, 40%);">+# Qt Help Project / Custom Filters</a>.</span><br><span> </span><br><span> QHP_CUST_FILTER_ATTRS  =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's</span><br><span style="color: hsl(120, 100%, 40%);">+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this</span><br><span style="color: hsl(120, 100%, 40%);">+# project's</span><br><span> # filter section matches.</span><br><span style="color: hsl(0, 100%, 40%);">-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.</span><br><span style="color: hsl(120, 100%, 40%);">+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes"></span><br><span style="color: hsl(120, 100%, 40%);">+# Qt Help Project / Filter Attributes</a>.</span><br><span> </span><br><span> QHP_SECT_FILTER_ATTRS  =</span><br><span> </span><br><span>@@ -929,17 +1110,31 @@</span><br><span> </span><br><span> QHG_LOCATION           =</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at</span><br><span style="color: hsl(0, 100%, 40%);">-# top of each HTML page. The value NO (the default) enables the index and</span><br><span style="color: hsl(0, 100%, 40%);">-# the value YES disables it.</span><br><span style="color: hsl(120, 100%, 40%);">+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files</span><br><span style="color: hsl(120, 100%, 40%);">+#  will be generated, which together with the HTML files, form an Eclipse help</span><br><span style="color: hsl(120, 100%, 40%);">+# plugin. To install this plugin and make it available under the help contents</span><br><span style="color: hsl(120, 100%, 40%);">+# menu in Eclipse, the contents of the directory containing the HTML and XML</span><br><span style="color: hsl(120, 100%, 40%);">+# files needs to be copied into the plugins directory of eclipse. The name of</span><br><span style="color: hsl(120, 100%, 40%);">+# the directory within the plugins directory should be the same as</span><br><span style="color: hsl(120, 100%, 40%);">+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before</span><br><span style="color: hsl(120, 100%, 40%);">+# the help appears.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+GENERATE_ECLIPSEHELP   = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# A unique identifier for the eclipse help plugin. When installing the plugin</span><br><span style="color: hsl(120, 100%, 40%);">+# the directory name containing the HTML and XML files should also have</span><br><span style="color: hsl(120, 100%, 40%);">+# this name.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ECLIPSE_DOC_ID         = org.doxygen.Project</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)</span><br><span style="color: hsl(120, 100%, 40%);">+# at top of each HTML page. The value NO (the default) enables the index and</span><br><span style="color: hsl(120, 100%, 40%);">+# the value YES disables it. Since the tabs have the same information as the</span><br><span style="color: hsl(120, 100%, 40%);">+# navigation tree you can set this option to NO if you already set</span><br><span style="color: hsl(120, 100%, 40%);">+# GENERATE_TREEVIEW to YES.</span><br><span> </span><br><span> DISABLE_INDEX          = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# This tag can be used to set the number of enum values (range [1..20])</span><br><span style="color: hsl(0, 100%, 40%);">-# that doxygen will group on one line in the generated HTML documentation.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-ENUM_VALUES_PER_LINE   = 4</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index</span><br><span> # structure should be generated to display hierarchical information.</span><br><span> # If the tag value is set to YES, a side panel will be generated</span><br><span>@@ -947,13 +1142,17 @@</span><br><span> # is generated for HTML Help). For this to work a browser that supports</span><br><span> # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).</span><br><span> # Windows users are probably better off using the HTML help feature.</span><br><span style="color: hsl(120, 100%, 40%);">+# Since the tree basically has the same information as the tab index you</span><br><span style="color: hsl(120, 100%, 40%);">+# could consider to set DISABLE_INDEX to NO when enabling this option.</span><br><span> </span><br><span> GENERATE_TREEVIEW      = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,</span><br><span style="color: hsl(0, 100%, 40%);">-# and Class Hierarchy pages using a tree view instead of an ordered list.</span><br><span style="color: hsl(120, 100%, 40%);">+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values</span><br><span style="color: hsl(120, 100%, 40%);">+# (range [0,1..20]) that doxygen will group on one line in the generated HTML</span><br><span style="color: hsl(120, 100%, 40%);">+# documentation. Note that a value of 0 will completely suppress the enum</span><br><span style="color: hsl(120, 100%, 40%);">+# values from appearing in the overview section.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-USE_INLINE_TREES       = NO</span><br><span style="color: hsl(120, 100%, 40%);">+ENUM_VALUES_PER_LINE   = 4</span><br><span> </span><br><span> # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be</span><br><span> # used to set the initial width (in pixels) of the frame in which the tree</span><br><span>@@ -961,6 +1160,11 @@</span><br><span> </span><br><span> TREEVIEW_WIDTH         = 250</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open</span><br><span style="color: hsl(120, 100%, 40%);">+# links to external symbols imported via tag files in a separate window.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXT_LINKS_IN_WINDOW    = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # Use this tag to change the font size of Latex formulas included</span><br><span> # as images in the HTML documentation. The default is 10. Note that</span><br><span> # when you change the font size after a successful doxygen run you need</span><br><span>@@ -969,13 +1173,112 @@</span><br><span> </span><br><span> FORMULA_FONTSIZE       = 10</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript</span><br><span style="color: hsl(0, 100%, 40%);">-# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP)</span><br><span style="color: hsl(0, 100%, 40%);">-# there is already a search function so this one should typically</span><br><span style="color: hsl(0, 100%, 40%);">-# be disabled.</span><br><span style="color: hsl(120, 100%, 40%);">+# Use the FORMULA_TRANPARENT tag to determine whether or not the images</span><br><span style="color: hsl(120, 100%, 40%);">+# generated for formulas are transparent PNGs. Transparent PNGs are</span><br><span style="color: hsl(120, 100%, 40%);">+# not supported properly for IE 6.0, but are supported on all modern browsers.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that when changing this option you need to delete any form_*.png files</span><br><span style="color: hsl(120, 100%, 40%);">+# in the HTML output before the changes have effect.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+FORMULA_TRANSPARENT    = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax</span><br><span style="color: hsl(120, 100%, 40%);">+# (see http://www.mathjax.org) which uses client side Javascript for the</span><br><span style="color: hsl(120, 100%, 40%);">+# rendering instead of using prerendered bitmaps. Use this if you do not</span><br><span style="color: hsl(120, 100%, 40%);">+# have LaTeX installed or if you want to formulas look prettier in the HTML</span><br><span style="color: hsl(120, 100%, 40%);">+# output. When enabled you may also need to install MathJax separately and</span><br><span style="color: hsl(120, 100%, 40%);">+# configure the path to it using the MATHJAX_RELPATH option.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+USE_MATHJAX            = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When MathJax is enabled you can set the default output format to be used for</span><br><span style="color: hsl(120, 100%, 40%);">+# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and</span><br><span style="color: hsl(120, 100%, 40%);">+# SVG. The default value is HTML-CSS, which is slower, but has the best</span><br><span style="color: hsl(120, 100%, 40%);">+# compatibility.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_FORMAT         = HTML-CSS</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When MathJax is enabled you need to specify the location relative to the</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML output directory using the MATHJAX_RELPATH option. The destination</span><br><span style="color: hsl(120, 100%, 40%);">+# directory should contain the MathJax.js script. For instance, if the mathjax</span><br><span style="color: hsl(120, 100%, 40%);">+# directory is located at the same level as the HTML output directory, then</span><br><span style="color: hsl(120, 100%, 40%);">+# MATHJAX_RELPATH should be ../mathjax. The default value points to</span><br><span style="color: hsl(120, 100%, 40%);">+# the MathJax Content Delivery Network so you can quickly see the result without</span><br><span style="color: hsl(120, 100%, 40%);">+# installing MathJax.</span><br><span style="color: hsl(120, 100%, 40%);">+# However, it is strongly recommended to install a local</span><br><span style="color: hsl(120, 100%, 40%);">+# copy of MathJax from http://www.mathjax.org before deployment.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension</span><br><span style="color: hsl(120, 100%, 40%);">+# names that should be enabled during MathJax rendering.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_EXTENSIONS     =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript</span><br><span style="color: hsl(120, 100%, 40%);">+# pieces of code that will be used on startup of the MathJax code.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MATHJAX_CODEFILE       =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When the SEARCHENGINE tag is enabled doxygen will generate a search box</span><br><span style="color: hsl(120, 100%, 40%);">+# for the HTML output. The underlying search engine uses javascript</span><br><span style="color: hsl(120, 100%, 40%);">+# and DHTML and should work on any modern browser. Note that when using</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets</span><br><span style="color: hsl(120, 100%, 40%);">+# (GENERATE_DOCSET) there is already a search function so this one should</span><br><span style="color: hsl(120, 100%, 40%);">+# typically be disabled. For large projects the javascript based search engine</span><br><span style="color: hsl(120, 100%, 40%);">+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.</span><br><span> </span><br><span> SEARCHENGINE           = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be</span><br><span style="color: hsl(120, 100%, 40%);">+# implemented using a web server instead of a web client using Javascript.</span><br><span style="color: hsl(120, 100%, 40%);">+# There are two flavours of web server based search depending on the</span><br><span style="color: hsl(120, 100%, 40%);">+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for</span><br><span style="color: hsl(120, 100%, 40%);">+# searching and an index file used by the script. When EXTERNAL_SEARCH is</span><br><span style="color: hsl(120, 100%, 40%);">+# enabled the indexing and searching needs to be provided by external tools.</span><br><span style="color: hsl(120, 100%, 40%);">+# See the manual for details.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SERVER_BASED_SEARCH    = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP</span><br><span style="color: hsl(120, 100%, 40%);">+# script for searching. Instead the search results are written to an XML file</span><br><span style="color: hsl(120, 100%, 40%);">+# which needs to be processed by an external indexer. Doxygen will invoke an</span><br><span style="color: hsl(120, 100%, 40%);">+# external search engine pointed to by the SEARCHENGINE_URL option to obtain</span><br><span style="color: hsl(120, 100%, 40%);">+# the search results. Doxygen ships with an example indexer (doxyindexer) and</span><br><span style="color: hsl(120, 100%, 40%);">+# search engine (doxysearch.cgi) which are based on the open source search</span><br><span style="color: hsl(120, 100%, 40%);">+# engine library Xapian. See the manual for configuration details.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTERNAL_SEARCH        = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The SEARCHENGINE_URL should point to a search engine hosted by a web server</span><br><span style="color: hsl(120, 100%, 40%);">+# which will returned the search results when EXTERNAL_SEARCH is enabled.</span><br><span style="color: hsl(120, 100%, 40%);">+# Doxygen ships with an example search engine (doxysearch) which is based on</span><br><span style="color: hsl(120, 100%, 40%);">+# the open source search engine library Xapian. See the manual for configuration</span><br><span style="color: hsl(120, 100%, 40%);">+# details.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SEARCHENGINE_URL       =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed</span><br><span style="color: hsl(120, 100%, 40%);">+# search data is written to a file for indexing by an external tool. With the</span><br><span style="color: hsl(120, 100%, 40%);">+# SEARCHDATA_FILE tag the name of this file can be specified.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+SEARCHDATA_FILE        = searchdata.xml</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the</span><br><span style="color: hsl(120, 100%, 40%);">+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is</span><br><span style="color: hsl(120, 100%, 40%);">+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple</span><br><span style="color: hsl(120, 100%, 40%);">+# projects and redirect the results back to the right project.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTERNAL_SEARCH_ID     =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen</span><br><span style="color: hsl(120, 100%, 40%);">+# projects other than the one defined by this configuration file, but that are</span><br><span style="color: hsl(120, 100%, 40%);">+# all added to the same external search index. Each project needs to have a</span><br><span style="color: hsl(120, 100%, 40%);">+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id</span><br><span style="color: hsl(120, 100%, 40%);">+# of to a relative location where the documentation can be found.</span><br><span style="color: hsl(120, 100%, 40%);">+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_SEARCH_MAPPINGS  =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to the LaTeX output</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -993,6 +1296,9 @@</span><br><span> </span><br><span> # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be</span><br><span> # invoked. If left blank `latex' will be used as the default command name.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that when enabling USE_PDFLATEX this option is only used for</span><br><span style="color: hsl(120, 100%, 40%);">+# generating bitmaps for formulas in the HTML output, but not in the</span><br><span style="color: hsl(120, 100%, 40%);">+# Makefile that is written to the output directory.</span><br><span> </span><br><span> LATEX_CMD_NAME         = latex</span><br><span> </span><br><span>@@ -1009,8 +1315,8 @@</span><br><span> COMPACT_LATEX          = NO</span><br><span> </span><br><span> # The PAPER_TYPE tag can be used to set the paper type that is used</span><br><span style="color: hsl(0, 100%, 40%);">-# by the printer. Possible values are: a4, a4wide, letter, legal and</span><br><span style="color: hsl(0, 100%, 40%);">-# executive. If left blank a4wide will be used.</span><br><span style="color: hsl(120, 100%, 40%);">+# by the printer. Possible values are: a4, letter, legal and</span><br><span style="color: hsl(120, 100%, 40%);">+# executive. If left blank a4 will be used.</span><br><span> </span><br><span> PAPER_TYPE             = a4wide</span><br><span> </span><br><span>@@ -1026,6 +1332,20 @@</span><br><span> </span><br><span> LATEX_HEADER           =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for</span><br><span style="color: hsl(120, 100%, 40%);">+# the generated latex document. The footer should contain everything after</span><br><span style="color: hsl(120, 100%, 40%);">+# the last chapter. If it is left blank doxygen will generate a</span><br><span style="color: hsl(120, 100%, 40%);">+# standard footer. Notice: only use this tag if you know what you are doing!</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+LATEX_FOOTER           =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images</span><br><span style="color: hsl(120, 100%, 40%);">+# or other source files which should be copied to the LaTeX output directory.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that the files will be copied as-is; there are no commands or markers</span><br><span style="color: hsl(120, 100%, 40%);">+# available.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+LATEX_EXTRA_FILES      =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated</span><br><span> # is prepared for conversion to pdf (using ps2pdf). The pdf file will</span><br><span> # contain links (just like the HTML output) instead of page references</span><br><span>@@ -1052,10 +1372,19 @@</span><br><span> </span><br><span> LATEX_HIDE_INDICES     = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.</span><br><span style="color: hsl(120, 100%, 40%);">+# If LATEX_SOURCE_CODE is set to YES then doxygen will include</span><br><span style="color: hsl(120, 100%, 40%);">+# source code with syntax highlighting in the LaTeX output.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that which sources are shown also depends on other settings</span><br><span style="color: hsl(120, 100%, 40%);">+# such as SOURCE_BROWSER.</span><br><span> </span><br><span> LATEX_SOURCE_CODE      = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the</span><br><span style="color: hsl(120, 100%, 40%);">+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See</span><br><span style="color: hsl(120, 100%, 40%);">+# http://en.wikipedia.org/wiki/BibTeX for more info.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+LATEX_BIB_STYLE        = plain</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #---------------------------------------------------------------------------</span><br><span> # configuration options related to the RTF output</span><br><span> #---------------------------------------------------------------------------</span><br><span>@@ -1087,7 +1416,7 @@</span><br><span> </span><br><span> RTF_HYPERLINKS         = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# Load stylesheet definitions from file. Syntax is similar to doxygen's</span><br><span style="color: hsl(120, 100%, 40%);">+# Load style sheet definitions from file. Syntax is similar to doxygen's</span><br><span> # config file, i.e. a series of assignments. You only have to provide</span><br><span> # replacements, missing definitions are set to their default value.</span><br><span> </span><br><span>@@ -1142,18 +1471,6 @@</span><br><span> </span><br><span> XML_OUTPUT             = xml</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The XML_SCHEMA tag can be used to specify an XML schema,</span><br><span style="color: hsl(0, 100%, 40%);">-# which can be used by a validating XML parser to check the</span><br><span style="color: hsl(0, 100%, 40%);">-# syntax of the XML files.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-XML_SCHEMA             =</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-# The XML_DTD tag can be used to specify an XML DTD,</span><br><span style="color: hsl(0, 100%, 40%);">-# which can be used by a validating XML parser to check the</span><br><span style="color: hsl(0, 100%, 40%);">-# syntax of the XML files.</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-XML_DTD                =</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> # If the XML_PROGRAMLISTING tag is set to YES Doxygen will</span><br><span> # dump the program listings (including syntax highlighting</span><br><span> # and cross-referencing information) to the XML output. Note that</span><br><span>@@ -1162,6 +1479,21 @@</span><br><span> XML_PROGRAMLISTING     = YES</span><br><span> </span><br><span> #---------------------------------------------------------------------------</span><br><span style="color: hsl(120, 100%, 40%);">+# configuration options related to the DOCBOOK output</span><br><span style="color: hsl(120, 100%, 40%);">+#---------------------------------------------------------------------------</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files</span><br><span style="color: hsl(120, 100%, 40%);">+# that can be used to generate PDF.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+GENERATE_DOCBOOK       = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put.</span><br><span style="color: hsl(120, 100%, 40%);">+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in</span><br><span style="color: hsl(120, 100%, 40%);">+# front of it. If left blank docbook will be used as the default path.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOCBOOK_OUTPUT         = docbook</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#---------------------------------------------------------------------------</span><br><span> # configuration options for the AutoGen Definitions output</span><br><span> #---------------------------------------------------------------------------</span><br><span> </span><br><span>@@ -1232,7 +1564,7 @@</span><br><span> EXPAND_ONLY_PREDEF     = NO</span><br><span> </span><br><span> # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files</span><br><span style="color: hsl(0, 100%, 40%);">-# in the INCLUDE_PATH (see below) will be search if a #include is found.</span><br><span style="color: hsl(120, 100%, 40%);">+# pointed to by INCLUDE_PATH will be searched when a #include is found.</span><br><span> </span><br><span> SEARCH_INCLUDES        = YES</span><br><span> </span><br><span>@@ -1262,15 +1594,15 @@</span><br><span> # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then</span><br><span> # this tag can be used to specify a list of macro names that should be expanded.</span><br><span> # The macro definition that is found in the sources will be used.</span><br><span style="color: hsl(0, 100%, 40%);">-# Use the PREDEFINED tag if you want to use a different macro definition.</span><br><span style="color: hsl(120, 100%, 40%);">+# Use the PREDEFINED tag if you want to use a different macro definition that</span><br><span style="color: hsl(120, 100%, 40%);">+# overrules the definition found in the source code.</span><br><span> </span><br><span> EXPAND_AS_DEFINED      =</span><br><span> </span><br><span> # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then</span><br><span style="color: hsl(0, 100%, 40%);">-# doxygen's preprocessor will remove all function-like macros that are alone</span><br><span style="color: hsl(0, 100%, 40%);">-# on a line, have an all uppercase name, and do not end with a semicolon. Such</span><br><span style="color: hsl(0, 100%, 40%);">-# function macros are typically used for boiler-plate code, and will confuse</span><br><span style="color: hsl(0, 100%, 40%);">-# the parser if not removed.</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen's preprocessor will remove all references to function-like macros</span><br><span style="color: hsl(120, 100%, 40%);">+# that are alone on a line, have an all uppercase name, and do not end with a</span><br><span style="color: hsl(120, 100%, 40%);">+# semicolon, because these will confuse the parser if not removed.</span><br><span> </span><br><span> SKIP_FUNCTION_MACROS   = YES</span><br><span> </span><br><span>@@ -1278,22 +1610,18 @@</span><br><span> # Configuration::additions related to external references</span><br><span> #---------------------------------------------------------------------------</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# The TAGFILES option can be used to specify one or more tagfiles.</span><br><span style="color: hsl(0, 100%, 40%);">-# Optionally an initial location of the external documentation</span><br><span style="color: hsl(0, 100%, 40%);">-# can be added for each tagfile. The format of a tag file without</span><br><span style="color: hsl(0, 100%, 40%);">-# this location is as follows:</span><br><span style="color: hsl(120, 100%, 40%);">+# The TAGFILES option can be used to specify one or more tagfiles. For each</span><br><span style="color: hsl(120, 100%, 40%);">+# tag file the location of the external documentation should be added. The</span><br><span style="color: hsl(120, 100%, 40%);">+# format of a tag file without this location is as follows:</span><br><span> #</span><br><span> # TAGFILES = file1 file2 ...</span><br><span> # Adding location for the tag files is done as follows:</span><br><span> #</span><br><span> # TAGFILES = file1=loc1 "file2 = loc2" ...</span><br><span style="color: hsl(0, 100%, 40%);">-# where "loc1" and "loc2" can be relative or absolute paths or</span><br><span style="color: hsl(0, 100%, 40%);">-# URLs. If a location is present for each tag, the installdox tool</span><br><span style="color: hsl(0, 100%, 40%);">-# does not have to be run to correct the links.</span><br><span style="color: hsl(0, 100%, 40%);">-# Note that each tag file must have a unique name</span><br><span style="color: hsl(0, 100%, 40%);">-# (where the name does NOT include the path)</span><br><span style="color: hsl(0, 100%, 40%);">-# If a tag file is not located in the directory in which doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-# is run, you must also specify the path to the tagfile here.</span><br><span style="color: hsl(120, 100%, 40%);">+# where "loc1" and "loc2" can be relative or absolute paths</span><br><span style="color: hsl(120, 100%, 40%);">+# or URLs. Note that each tag file must have a unique name (where the name does</span><br><span style="color: hsl(120, 100%, 40%);">+# NOT include the path). If a tag file is not located in the directory in which</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen is run, you must also specify the path to the tagfile here.</span><br><span> </span><br><span> TAGFILES               =</span><br><span> </span><br><span>@@ -1314,6 +1642,12 @@</span><br><span> </span><br><span> EXTERNAL_GROUPS        = YES</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed</span><br><span style="color: hsl(120, 100%, 40%);">+# in the related pages index. If set to NO, only the current project's</span><br><span style="color: hsl(120, 100%, 40%);">+# pages will be listed.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTERNAL_PAGES         = YES</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The PERL_PATH should be the absolute path and name of the perl script</span><br><span> # interpreter (i.e. the result of `which perl').</span><br><span> </span><br><span>@@ -1326,9 +1660,8 @@</span><br><span> # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will</span><br><span> # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base</span><br><span> # or super classes. Setting the tag to NO turns the diagrams off. Note that</span><br><span style="color: hsl(0, 100%, 40%);">-# this option is superseded by the HAVE_DOT option below. This is only a</span><br><span style="color: hsl(0, 100%, 40%);">-# fallback. It is recommended to install and use dot, since it yields more</span><br><span style="color: hsl(0, 100%, 40%);">-# powerful graphs.</span><br><span style="color: hsl(120, 100%, 40%);">+# this option also works with HAVE_DOT disabled, but it is recommended to</span><br><span style="color: hsl(120, 100%, 40%);">+# install and use dot, since it yields more powerful graphs.</span><br><span> </span><br><span> CLASS_DIAGRAMS         = YES</span><br><span> </span><br><span>@@ -1354,33 +1687,38 @@</span><br><span> </span><br><span> HAVE_DOT               = NO</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# By default doxygen will write a font called FreeSans.ttf to the output</span><br><span style="color: hsl(0, 100%, 40%);">-# directory and reference it in all dot files that doxygen generates. This</span><br><span style="color: hsl(0, 100%, 40%);">-# font does not include all possible unicode characters however, so when you need</span><br><span style="color: hsl(0, 100%, 40%);">-# these (or just want a differently looking font) you can specify the font name</span><br><span style="color: hsl(0, 100%, 40%);">-# using DOT_FONTNAME. You need need to make sure dot is able to find the font,</span><br><span style="color: hsl(0, 100%, 40%);">-# which can be done by putting it in a standard location or by setting the</span><br><span style="color: hsl(0, 100%, 40%);">-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory</span><br><span style="color: hsl(0, 100%, 40%);">-# containing the font.</span><br><span style="color: hsl(120, 100%, 40%);">+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is</span><br><span style="color: hsl(120, 100%, 40%);">+# allowed to run in parallel. When set to 0 (the default) doxygen will</span><br><span style="color: hsl(120, 100%, 40%);">+# base this on the number of processors available in the system. You can set it</span><br><span style="color: hsl(120, 100%, 40%);">+# explicitly to a value larger than 0 to get control over the balance</span><br><span style="color: hsl(120, 100%, 40%);">+# between CPU load and processing speed.</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-DOT_FONTNAME           = FreeSans</span><br><span style="color: hsl(120, 100%, 40%);">+DOT_NUM_THREADS        = 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# By default doxygen will use the Helvetica font for all dot files that</span><br><span style="color: hsl(120, 100%, 40%);">+# doxygen generates. When you want a differently looking font you can specify</span><br><span style="color: hsl(120, 100%, 40%);">+# the font name using DOT_FONTNAME. You need to make sure dot is able to find</span><br><span style="color: hsl(120, 100%, 40%);">+# the font, which can be done by putting it in a standard location or by setting</span><br><span style="color: hsl(120, 100%, 40%);">+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the</span><br><span style="color: hsl(120, 100%, 40%);">+# directory containing the font.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+DOT_FONTNAME           = Helvetica</span><br><span> </span><br><span> # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.</span><br><span> # The default size is 10pt.</span><br><span> </span><br><span> DOT_FONTSIZE           = 10</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# By default doxygen will tell dot to use the output directory to look for the</span><br><span style="color: hsl(0, 100%, 40%);">-# FreeSans.ttf font (which doxygen will put there itself). If you specify a</span><br><span style="color: hsl(0, 100%, 40%);">-# different font using DOT_FONTNAME you can set the path where dot</span><br><span style="color: hsl(0, 100%, 40%);">-# can find it using this tag.</span><br><span style="color: hsl(120, 100%, 40%);">+# By default doxygen will tell dot to use the Helvetica font.</span><br><span style="color: hsl(120, 100%, 40%);">+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to</span><br><span style="color: hsl(120, 100%, 40%);">+# set the path where dot can find it.</span><br><span> </span><br><span> DOT_FONTPATH           =</span><br><span> </span><br><span> # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen</span><br><span> # will generate a graph for each documented class showing the direct and</span><br><span> # indirect inheritance relations. Setting this tag to YES will force the</span><br><span style="color: hsl(0, 100%, 40%);">-# the CLASS_DIAGRAMS tag to NO.</span><br><span style="color: hsl(120, 100%, 40%);">+# CLASS_DIAGRAMS tag to NO.</span><br><span> </span><br><span> CLASS_GRAPH            = YES</span><br><span> </span><br><span>@@ -1402,6 +1740,15 @@</span><br><span> </span><br><span> UML_LOOK               = NO</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If the UML_LOOK tag is enabled, the fields and methods are shown inside</span><br><span style="color: hsl(120, 100%, 40%);">+# the class node. If there are many fields or methods and many nodes the</span><br><span style="color: hsl(120, 100%, 40%);">+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS</span><br><span style="color: hsl(120, 100%, 40%);">+# threshold limits the number of items for each type to make the size more</span><br><span style="color: hsl(120, 100%, 40%);">+# manageable. Set this to 0 for no limit. Note that the threshold may be</span><br><span style="color: hsl(120, 100%, 40%);">+# exceeded by 50% before the limit is enforced.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+UML_LIMIT_NUM_FIELDS   = 10</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # If set to YES, the inheritance and collaboration graphs will show the</span><br><span> # relations between templates and their instances.</span><br><span> </span><br><span>@@ -1438,11 +1785,11 @@</span><br><span> CALLER_GRAPH           = NO</span><br><span> </span><br><span> # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen</span><br><span style="color: hsl(0, 100%, 40%);">-# will graphical hierarchy of all classes instead of a textual one.</span><br><span style="color: hsl(120, 100%, 40%);">+# will generate a graphical hierarchy of all classes instead of a textual one.</span><br><span> </span><br><span> GRAPHICAL_HIERARCHY    = YES</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES</span><br><span style="color: hsl(120, 100%, 40%);">+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES</span><br><span> # then doxygen will show the dependencies a directory has on other directories</span><br><span> # in a graphical way. The dependency relations are determined by the #include</span><br><span> # relations between the files in the directories.</span><br><span>@@ -1450,11 +1797,22 @@</span><br><span> DIRECTORY_GRAPH        = YES</span><br><span> </span><br><span> # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images</span><br><span style="color: hsl(0, 100%, 40%);">-# generated by dot. Possible values are png, jpg, or gif</span><br><span style="color: hsl(0, 100%, 40%);">-# If left blank png will be used.</span><br><span style="color: hsl(120, 100%, 40%);">+# generated by dot. Possible values are svg, png, jpg, or gif.</span><br><span style="color: hsl(120, 100%, 40%);">+# If left blank png will be used. If you choose svg you need to set</span><br><span style="color: hsl(120, 100%, 40%);">+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files</span><br><span style="color: hsl(120, 100%, 40%);">+# visible in IE 9+ (other browsers do not have this requirement).</span><br><span> </span><br><span> DOT_IMAGE_FORMAT       = png</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to</span><br><span style="color: hsl(120, 100%, 40%);">+# enable generation of interactive SVG images that allow zooming and panning.</span><br><span style="color: hsl(120, 100%, 40%);">+# Note that this requires a modern browser other than Internet Explorer.</span><br><span style="color: hsl(120, 100%, 40%);">+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you</span><br><span style="color: hsl(120, 100%, 40%);">+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files</span><br><span style="color: hsl(120, 100%, 40%);">+# visible. Older versions of IE do not have SVG support.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+INTERACTIVE_SVG        = NO</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The tag DOT_PATH can be used to specify the path where the dot tool can be</span><br><span> # found. If left blank, it is assumed the dot tool can be found in the path.</span><br><span> </span><br><span>@@ -1466,6 +1824,12 @@</span><br><span> </span><br><span> DOTFILE_DIRS           =</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+# The MSCFILE_DIRS tag can be used to specify one or more directories that</span><br><span style="color: hsl(120, 100%, 40%);">+# contain msc files that are included in the documentation (see the</span><br><span style="color: hsl(120, 100%, 40%);">+# \mscfile command).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+MSCFILE_DIRS           =</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of</span><br><span> # nodes that will be shown in the graph. If the number of nodes in a graph</span><br><span> # becomes larger than this value, doxygen will truncate the graph, which is</span><br><span>diff --git a/docs/doxygen/doxyxml/__init__.py b/docs/doxygen/doxyxml/__init__.py</span><br><span>index 5cd0b3c..3b0a580 100644</span><br><span>--- a/docs/doxygen/doxyxml/__init__.py</span><br><span>+++ b/docs/doxygen/doxyxml/__init__.py</span><br><span>@@ -1,7 +1,8 @@</span><br><span> #</span><br><span> # Copyright 2010 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -63,8 +64,9 @@</span><br><span> u'Outputs the vital aadvark statistics.'</span><br><span> </span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-from doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther</span><br><span style="color: hsl(120, 100%, 40%);">+from .doxyindex import DoxyIndex, DoxyFunction, DoxyParam, DoxyClass, DoxyFile, DoxyNamespace, DoxyGroup, DoxyFriend, DoxyOther</span><br><span> </span><br><span> def _test():</span><br><span>     import os</span><br><span>diff --git a/docs/doxygen/doxyxml/base.py b/docs/doxygen/doxyxml/base.py</span><br><span>index e8f026a..071d8f1 100644</span><br><span>--- a/docs/doxygen/doxyxml/base.py</span><br><span>+++ b/docs/doxygen/doxyxml/base.py</span><br><span>@@ -1,7 +1,8 @@</span><br><span> #</span><br><span> # Copyright 2010 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -24,24 +25,26 @@</span><br><span> Classes based upon this are used to make more user-friendly interfaces</span><br><span> to the doxygen xml docs than the generated classes provide.</span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import print_function</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span> </span><br><span> import os</span><br><span> import pdb</span><br><span> </span><br><span> from xml.parsers.expat import ExpatError</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-from generated import compound</span><br><span style="color: hsl(120, 100%, 40%);">+from .generated import compound</span><br><span> </span><br><span> </span><br><span> class Base(object):</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    class Duplicate(StandardError):</span><br><span style="color: hsl(120, 100%, 40%);">+    class Duplicate(Exception):</span><br><span>         pass</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    class NoSuchMember(StandardError):</span><br><span style="color: hsl(120, 100%, 40%);">+    class NoSuchMember(Exception):</span><br><span>         pass</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    class ParsingError(StandardError):</span><br><span style="color: hsl(120, 100%, 40%);">+    class ParsingError(Exception):</span><br><span>         pass</span><br><span> </span><br><span>     def __init__(self, parse_data, top=None):</span><br><span>@@ -94,7 +97,7 @@</span><br><span>         for cls in self.mem_classes:</span><br><span>             if cls.can_parse(mem):</span><br><span>                 return cls</span><br><span style="color: hsl(0, 100%, 40%);">-        raise StandardError(("Did not find a class for object '%s'." \</span><br><span style="color: hsl(120, 100%, 40%);">+        raise Exception(("Did not find a class for object '%s'." \</span><br><span>                                  % (mem.get_name())))</span><br><span> </span><br><span>     def convert_mem(self, mem):</span><br><span>@@ -102,11 +105,11 @@</span><br><span>             cls = self.get_cls(mem)</span><br><span>             converted = cls.from_parse_data(mem, self.top)</span><br><span>             if converted is None:</span><br><span style="color: hsl(0, 100%, 40%);">-                raise StandardError('No class matched this object.')</span><br><span style="color: hsl(120, 100%, 40%);">+                raise Exception('No class matched this object.')</span><br><span>             self.add_ref(converted)</span><br><span>             return converted</span><br><span style="color: hsl(0, 100%, 40%);">-        except StandardError, e:</span><br><span style="color: hsl(0, 100%, 40%);">-            print e</span><br><span style="color: hsl(120, 100%, 40%);">+        except Exception as e:</span><br><span style="color: hsl(120, 100%, 40%);">+            print(e)</span><br><span> </span><br><span>     @classmethod</span><br><span>     def includes(cls, inst):</span><br><span>diff --git a/docs/doxygen/doxyxml/doxyindex.py b/docs/doxygen/doxyxml/doxyindex.py</span><br><span>index 0132ab8..e00729e 100644</span><br><span>--- a/docs/doxygen/doxyxml/doxyindex.py</span><br><span>+++ b/docs/doxygen/doxyxml/doxyindex.py</span><br><span>@@ -1,7 +1,8 @@</span><br><span> #</span><br><span> # Copyright 2010 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -22,12 +23,14 @@</span><br><span> Classes providing more user-friendly interfaces to the doxygen xml</span><br><span> docs than the generated classes provide.</span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import absolute_import</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span> </span><br><span> import os</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-from generated import index</span><br><span style="color: hsl(0, 100%, 40%);">-from base import Base</span><br><span style="color: hsl(0, 100%, 40%);">-from text import description</span><br><span style="color: hsl(120, 100%, 40%);">+from .generated import index</span><br><span style="color: hsl(120, 100%, 40%);">+from .base import Base</span><br><span style="color: hsl(120, 100%, 40%);">+from .text import description</span><br><span> </span><br><span> class DoxyIndex(Base):</span><br><span>     """</span><br><span>@@ -43,13 +46,16 @@</span><br><span>         self._root = index.parse(os.path.join(self._xml_path, 'index.xml'))</span><br><span>         for mem in self._root.compound:</span><br><span>             converted = self.convert_mem(mem)</span><br><span style="color: hsl(0, 100%, 40%);">-            # For files we want the contents to be accessible directly</span><br><span style="color: hsl(0, 100%, 40%);">-            # from the parent rather than having to go through the file</span><br><span style="color: hsl(0, 100%, 40%);">-            # object.</span><br><span style="color: hsl(120, 100%, 40%);">+            # For files and namespaces we want the contents to be</span><br><span style="color: hsl(120, 100%, 40%);">+            # accessible directly from the parent rather than having</span><br><span style="color: hsl(120, 100%, 40%);">+            # to go through the file object.</span><br><span>             if self.get_cls(mem) == DoxyFile:</span><br><span>                 if mem.name.endswith('.h'):</span><br><span>                     self._members += converted.members()</span><br><span>                     self._members.append(converted)</span><br><span style="color: hsl(120, 100%, 40%);">+            elif self.get_cls(mem) == DoxyNamespace:</span><br><span style="color: hsl(120, 100%, 40%);">+                self._members += converted.members()</span><br><span style="color: hsl(120, 100%, 40%);">+                self._members.append(converted)</span><br><span>             else:</span><br><span>                 self._members.append(converted)</span><br><span> </span><br><span>@@ -80,13 +86,29 @@</span><br><span>         self._data['brief_description'] = bd</span><br><span>         self._data['detailed_description'] = dd</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def set_parameters(self, data):</span><br><span style="color: hsl(120, 100%, 40%);">+        vs = [ddc.value for ddc in data.detaileddescription.content_]</span><br><span style="color: hsl(120, 100%, 40%);">+        pls = []</span><br><span style="color: hsl(120, 100%, 40%);">+        for v in vs:</span><br><span style="color: hsl(120, 100%, 40%);">+            if hasattr(v, 'parameterlist'):</span><br><span style="color: hsl(120, 100%, 40%);">+                pls += v.parameterlist</span><br><span style="color: hsl(120, 100%, 40%);">+        pis = []</span><br><span style="color: hsl(120, 100%, 40%);">+        for pl in pls:</span><br><span style="color: hsl(120, 100%, 40%);">+            pis += pl.parameteritem</span><br><span style="color: hsl(120, 100%, 40%);">+        dpis = []</span><br><span style="color: hsl(120, 100%, 40%);">+        for pi in pis:</span><br><span style="color: hsl(120, 100%, 40%);">+            dpi = DoxyParameterItem(pi)</span><br><span style="color: hsl(120, 100%, 40%);">+            dpi._parse()</span><br><span style="color: hsl(120, 100%, 40%);">+            dpis.append(dpi)</span><br><span style="color: hsl(120, 100%, 40%);">+        self._data['params'] = dpis</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> class DoxyCompound(DoxyCompMem):</span><br><span>     pass</span><br><span> </span><br><span> class DoxyMember(DoxyCompMem):</span><br><span>     pass</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> class DoxyFunction(DoxyMember):</span><br><span> </span><br><span>     __module__ = "gnuradio.utils.doxyxml"</span><br><span>@@ -98,10 +120,13 @@</span><br><span>             return</span><br><span>         super(DoxyFunction, self)._parse()</span><br><span>         self.set_descriptions(self._parse_data)</span><br><span style="color: hsl(0, 100%, 40%);">-        self._data['params'] = []</span><br><span style="color: hsl(0, 100%, 40%);">-        prms = self._parse_data.param</span><br><span style="color: hsl(0, 100%, 40%);">-        for prm in prms:</span><br><span style="color: hsl(0, 100%, 40%);">-            self._data['params'].append(DoxyParam(prm))</span><br><span style="color: hsl(120, 100%, 40%);">+        self.set_parameters(self._parse_data)</span><br><span style="color: hsl(120, 100%, 40%);">+        if not self._data['params']:</span><br><span style="color: hsl(120, 100%, 40%);">+            # If the params weren't set by a comment then just grab the names.</span><br><span style="color: hsl(120, 100%, 40%);">+            self._data['params'] = []</span><br><span style="color: hsl(120, 100%, 40%);">+            prms = self._parse_data.param</span><br><span style="color: hsl(120, 100%, 40%);">+            for prm in prms:</span><br><span style="color: hsl(120, 100%, 40%);">+                self._data['params'].append(DoxyParam(prm))</span><br><span> </span><br><span>     brief_description = property(lambda self: self.data()['brief_description'])</span><br><span>     detailed_description = property(lambda self: self.data()['detailed_description'])</span><br><span>@@ -121,9 +146,39 @@</span><br><span>         self.set_descriptions(self._parse_data)</span><br><span>         self._data['declname'] = self._parse_data.declname</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    @property</span><br><span style="color: hsl(120, 100%, 40%);">+    def description(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        descriptions = []</span><br><span style="color: hsl(120, 100%, 40%);">+        if self.brief_description:</span><br><span style="color: hsl(120, 100%, 40%);">+            descriptions.append(self.brief_description)</span><br><span style="color: hsl(120, 100%, 40%);">+        if self.detailed_description:</span><br><span style="color: hsl(120, 100%, 40%);">+            descriptions.append(self.detailed_description)</span><br><span style="color: hsl(120, 100%, 40%);">+        return '\n\n'.join(descriptions)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     brief_description = property(lambda self: self.data()['brief_description'])</span><br><span>     detailed_description = property(lambda self: self.data()['detailed_description'])</span><br><span style="color: hsl(0, 100%, 40%);">-    declname = property(lambda self: self.data()['declname'])</span><br><span style="color: hsl(120, 100%, 40%);">+    name = property(lambda self: self.data()['declname'])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class DoxyParameterItem(DoxyMember):</span><br><span style="color: hsl(120, 100%, 40%);">+    """A different representation of a parameter in Doxygen."""</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def _parse(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        if self._parsed:</span><br><span style="color: hsl(120, 100%, 40%);">+            return</span><br><span style="color: hsl(120, 100%, 40%);">+        super(DoxyParameterItem, self)._parse()</span><br><span style="color: hsl(120, 100%, 40%);">+        names = []</span><br><span style="color: hsl(120, 100%, 40%);">+        for nl in self._parse_data.parameternamelist:</span><br><span style="color: hsl(120, 100%, 40%);">+            for pn in nl.parametername:</span><br><span style="color: hsl(120, 100%, 40%);">+                names.append(description(pn))</span><br><span style="color: hsl(120, 100%, 40%);">+        # Just take first name</span><br><span style="color: hsl(120, 100%, 40%);">+        self._data['name'] = names[0]</span><br><span style="color: hsl(120, 100%, 40%);">+        # Get description</span><br><span style="color: hsl(120, 100%, 40%);">+        pd = description(self._parse_data.get_parameterdescription())</span><br><span style="color: hsl(120, 100%, 40%);">+        self._data['description'] = pd</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    description = property(lambda self: self.data()['description'])</span><br><span style="color: hsl(120, 100%, 40%);">+    name = property(lambda self: self.data()['name'])</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> </span><br><span> class DoxyClass(DoxyCompound):</span><br><span> </span><br><span>@@ -139,12 +194,14 @@</span><br><span>         if self._error:</span><br><span>             return</span><br><span>         self.set_descriptions(self._retrieved_data.compounddef)</span><br><span style="color: hsl(120, 100%, 40%);">+        self.set_parameters(self._retrieved_data.compounddef)</span><br><span>         # Sectiondef.kind tells about whether private or public.</span><br><span>         # We just ignore this for now.</span><br><span>         self.process_memberdefs()</span><br><span> </span><br><span>     brief_description = property(lambda self: self.data()['brief_description'])</span><br><span>     detailed_description = property(lambda self: self.data()['detailed_description'])</span><br><span style="color: hsl(120, 100%, 40%);">+    params = property(lambda self: self.data()['params'])</span><br><span> </span><br><span> Base.mem_classes.append(DoxyClass)</span><br><span> </span><br><span>@@ -177,6 +234,16 @@</span><br><span> </span><br><span>     kind = 'namespace'</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def _parse(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        if self._parsed:</span><br><span style="color: hsl(120, 100%, 40%);">+            return</span><br><span style="color: hsl(120, 100%, 40%);">+        super(DoxyNamespace, self)._parse()</span><br><span style="color: hsl(120, 100%, 40%);">+        self.retrieve_data()</span><br><span style="color: hsl(120, 100%, 40%);">+        self.set_descriptions(self._retrieved_data.compounddef)</span><br><span style="color: hsl(120, 100%, 40%);">+        if self._error:</span><br><span style="color: hsl(120, 100%, 40%);">+            return</span><br><span style="color: hsl(120, 100%, 40%);">+        self.process_memberdefs()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> Base.mem_classes.append(DoxyNamespace)</span><br><span> </span><br><span> </span><br><span>@@ -227,11 +294,11 @@</span><br><span> </span><br><span>     __module__ = "gnuradio.utils.doxyxml"</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum', 'dir', 'page'])</span><br><span style="color: hsl(120, 100%, 40%);">+    kinds = set(['variable', 'struct', 'union', 'define', 'typedef', 'enum',</span><br><span style="color: hsl(120, 100%, 40%);">+                 'dir', 'page', 'signal', 'slot', 'property'])</span><br><span> </span><br><span>     @classmethod</span><br><span>     def can_parse(cls, obj):</span><br><span>         return obj.kind in cls.kinds</span><br><span> </span><br><span> Base.mem_classes.append(DoxyOther)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/docs/doxygen/doxyxml/generated/__init__.py b/docs/doxygen/doxyxml/generated/__init__.py</span><br><span>index 3982397..23095c1 100644</span><br><span>--- a/docs/doxygen/doxyxml/generated/__init__.py</span><br><span>+++ b/docs/doxygen/doxyxml/generated/__init__.py</span><br><span>@@ -5,3 +5,4 @@</span><br><span> resultant classes are not very friendly to navigate so the rest of the</span><br><span> doxyxml module processes them further.</span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span>diff --git a/docs/doxygen/doxyxml/generated/compound.py b/docs/doxygen/doxyxml/generated/compound.py</span><br><span>index 1522ac2..de4f506 100644</span><br><span>--- a/docs/doxygen/doxyxml/generated/compound.py</span><br><span>+++ b/docs/doxygen/doxyxml/generated/compound.py</span><br><span>@@ -1,17 +1,19 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env python</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span> </span><br><span> """</span><br><span> Generated Mon Feb  9 19:08:05 2009 by generateDS.py.</span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import absolute_import</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-from string import lower as str_lower</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> from xml.dom import minidom</span><br><span> from xml.dom import Node</span><br><span> </span><br><span> import sys</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-import compoundsuper as supermod</span><br><span style="color: hsl(0, 100%, 40%);">-from compoundsuper import MixedContainer</span><br><span style="color: hsl(120, 100%, 40%);">+from . import compoundsuper as supermod</span><br><span style="color: hsl(120, 100%, 40%);">+from .compoundsuper import MixedContainer</span><br><span> </span><br><span> </span><br><span> class DoxygenTypeSub(supermod.DoxygenType):</span><br><span>diff --git a/docs/doxygen/doxyxml/generated/compoundsuper.py b/docs/doxygen/doxyxml/generated/compoundsuper.py</span><br><span>index 6255dda..b68978f 100644</span><br><span>--- a/docs/doxygen/doxyxml/generated/compoundsuper.py</span><br><span>+++ b/docs/doxygen/doxyxml/generated/compoundsuper.py</span><br><span>@@ -1,15 +1,20 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env python</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span> </span><br><span> #</span><br><span> # Generated Thu Jun 11 18:44:25 2009 by generateDS.py.</span><br><span> #</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import print_function</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> import sys</span><br><span style="color: hsl(0, 100%, 40%);">-import getopt</span><br><span style="color: hsl(0, 100%, 40%);">-from string import lower as str_lower</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> from xml.dom import minidom</span><br><span> from xml.dom import Node</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import six</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #</span><br><span> # User methods</span><br><span> #</span><br><span>@@ -19,9 +24,9 @@</span><br><span> </span><br><span> try:</span><br><span>     from generatedssuper import GeneratedsSuper</span><br><span style="color: hsl(0, 100%, 40%);">-except ImportError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+except ImportError as exp:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    class GeneratedsSuper:</span><br><span style="color: hsl(120, 100%, 40%);">+    class GeneratedsSuper(object):</span><br><span>         def format_string(self, input_data, input_name=''):</span><br><span>             return input_data</span><br><span>         def format_integer(self, input_data, input_name=''):</span><br><span>@@ -64,7 +69,7 @@</span><br><span>         outfile.write('    ')</span><br><span> </span><br><span> def quote_xml(inStr):</span><br><span style="color: hsl(0, 100%, 40%);">-    s1 = (isinstance(inStr, basestring) and inStr or</span><br><span style="color: hsl(120, 100%, 40%);">+    s1 = (isinstance(inStr, six.string_types) and inStr or</span><br><span>           '%s' % inStr)</span><br><span>     s1 = s1.replace('&', '&amp;')</span><br><span>     s1 = s1.replace('<', '&lt;')</span><br><span>@@ -72,7 +77,7 @@</span><br><span>     return s1</span><br><span> </span><br><span> def quote_attrib(inStr):</span><br><span style="color: hsl(0, 100%, 40%);">-    s1 = (isinstance(inStr, basestring) and inStr or</span><br><span style="color: hsl(120, 100%, 40%);">+    s1 = (isinstance(inStr, six.string_types) and inStr or</span><br><span>           '%s' % inStr)</span><br><span>     s1 = s1.replace('&', '&amp;')</span><br><span>     s1 = s1.replace('<', '&lt;')</span><br><span>@@ -102,7 +107,7 @@</span><br><span>             return '"""%s"""' % s1</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-class MixedContainer:</span><br><span style="color: hsl(120, 100%, 40%);">+class MixedContainer(object):</span><br><span>     # Constants for category:</span><br><span>     CategoryNone = 0</span><br><span>     CategoryText = 1</span><br><span>@@ -4221,7 +4226,7 @@</span><br><span>         if attrs.get('lineno'):</span><br><span>             try:</span><br><span>                 self.lineno = int(attrs.get('lineno').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (lineno): %s' % exp)</span><br><span>         if attrs.get('refkind'):</span><br><span>             self.refkind = attrs.get('refkind').value</span><br><span>@@ -4504,12 +4509,12 @@</span><br><span>         if attrs.get('endline'):</span><br><span>             try:</span><br><span>                 self.endline = int(attrs.get('endline').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (endline): %s' % exp)</span><br><span>         if attrs.get('startline'):</span><br><span>             try:</span><br><span>                 self.startline = int(attrs.get('startline').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (startline): %s' % exp)</span><br><span>         if attrs.get('refid'):</span><br><span>             self.refid = attrs.get('refid').value</span><br><span>@@ -4627,17 +4632,17 @@</span><br><span>         if attrs.get('bodystart'):</span><br><span>             try:</span><br><span>                 self.bodystart = int(attrs.get('bodystart').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (bodystart): %s' % exp)</span><br><span>         if attrs.get('line'):</span><br><span>             try:</span><br><span>                 self.line = int(attrs.get('line').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (line): %s' % exp)</span><br><span>         if attrs.get('bodyend'):</span><br><span>             try:</span><br><span>                 self.bodyend = int(attrs.get('bodyend').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (bodyend): %s' % exp)</span><br><span>         if attrs.get('bodyfile'):</span><br><span>             self.bodyfile = attrs.get('bodyfile').value</span><br><span>@@ -6778,12 +6783,12 @@</span><br><span>         if attrs.get('rows'):</span><br><span>             try:</span><br><span>                 self.rows = int(attrs.get('rows').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (rows): %s' % exp)</span><br><span>         if attrs.get('cols'):</span><br><span>             try:</span><br><span>                 self.cols = int(attrs.get('cols').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (cols): %s' % exp)</span><br><span>     def buildChildren(self, child_, nodeName_):</span><br><span>         if child_.nodeType == Node.ELEMENT_NODE and \</span><br><span>@@ -7108,7 +7113,7 @@</span><br><span>         if attrs.get('level'):</span><br><span>             try:</span><br><span>                 self.level = int(attrs.get('level').value)</span><br><span style="color: hsl(0, 100%, 40%);">-            except ValueError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+            except ValueError as exp:</span><br><span>                 raise ValueError('Bad integer attribute (level): %s' % exp)</span><br><span>     def buildChildren(self, child_, nodeName_):</span><br><span>         if child_.nodeType == Node.TEXT_NODE:</span><br><span>@@ -8283,7 +8288,7 @@</span><br><span> """</span><br><span> </span><br><span> def usage():</span><br><span style="color: hsl(0, 100%, 40%);">-    print USAGE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+    print(USAGE_TEXT)</span><br><span>     sys.exit(1)</span><br><span> </span><br><span> </span><br><span>@@ -8339,4 +8344,3 @@</span><br><span>     main()</span><br><span>     #import pdb</span><br><span>     #pdb.run('main()')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/docs/doxygen/doxyxml/generated/index.py b/docs/doxygen/doxyxml/generated/index.py</span><br><span>index 7a70e14..5b54c66 100644</span><br><span>--- a/docs/doxygen/doxyxml/generated/index.py</span><br><span>+++ b/docs/doxygen/doxyxml/generated/index.py</span><br><span>@@ -1,16 +1,18 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env python</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span> </span><br><span> """</span><br><span> Generated Mon Feb  9 19:08:05 2009 by generateDS.py.</span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import absolute_import</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span> </span><br><span> from xml.dom import minidom</span><br><span> </span><br><span> import os</span><br><span> import sys</span><br><span style="color: hsl(0, 100%, 40%);">-import compound</span><br><span style="color: hsl(120, 100%, 40%);">+from . import compound</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-import indexsuper as supermod</span><br><span style="color: hsl(120, 100%, 40%);">+from . import indexsuper as supermod</span><br><span> </span><br><span> class DoxygenTypeSub(supermod.DoxygenType):</span><br><span>     def __init__(self, version=None, compound=None):</span><br><span>diff --git a/docs/doxygen/doxyxml/generated/indexsuper.py b/docs/doxygen/doxyxml/generated/indexsuper.py</span><br><span>index a991530..2400d81 100644</span><br><span>--- a/docs/doxygen/doxyxml/generated/indexsuper.py</span><br><span>+++ b/docs/doxygen/doxyxml/generated/indexsuper.py</span><br><span>@@ -1,15 +1,19 @@</span><br><span style="color: hsl(0, 100%, 40%);">-#!/usr/bin/env python</span><br><span style="color: hsl(120, 100%, 40%);">+#!/usr/bin/env python3</span><br><span> </span><br><span> #</span><br><span> # Generated Thu Jun 11 18:43:54 2009 by generateDS.py.</span><br><span> #</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import print_function</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> import sys</span><br><span style="color: hsl(0, 100%, 40%);">-import getopt</span><br><span style="color: hsl(0, 100%, 40%);">-from string import lower as str_lower</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> from xml.dom import minidom</span><br><span> from xml.dom import Node</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+import six</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #</span><br><span> # User methods</span><br><span> #</span><br><span>@@ -19,9 +23,9 @@</span><br><span> </span><br><span> try:</span><br><span>     from generatedssuper import GeneratedsSuper</span><br><span style="color: hsl(0, 100%, 40%);">-except ImportError, exp:</span><br><span style="color: hsl(120, 100%, 40%);">+except ImportError as exp:</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    class GeneratedsSuper:</span><br><span style="color: hsl(120, 100%, 40%);">+    class GeneratedsSuper(object):</span><br><span>         def format_string(self, input_data, input_name=''):</span><br><span>             return input_data</span><br><span>         def format_integer(self, input_data, input_name=''):</span><br><span>@@ -64,7 +68,7 @@</span><br><span>         outfile.write('    ')</span><br><span> </span><br><span> def quote_xml(inStr):</span><br><span style="color: hsl(0, 100%, 40%);">-    s1 = (isinstance(inStr, basestring) and inStr or</span><br><span style="color: hsl(120, 100%, 40%);">+    s1 = (isinstance(inStr, six.string_types) and inStr or</span><br><span>           '%s' % inStr)</span><br><span>     s1 = s1.replace('&', '&amp;')</span><br><span>     s1 = s1.replace('<', '&lt;')</span><br><span>@@ -72,7 +76,7 @@</span><br><span>     return s1</span><br><span> </span><br><span> def quote_attrib(inStr):</span><br><span style="color: hsl(0, 100%, 40%);">-    s1 = (isinstance(inStr, basestring) and inStr or</span><br><span style="color: hsl(120, 100%, 40%);">+    s1 = (isinstance(inStr, six.string_types) and inStr or</span><br><span>           '%s' % inStr)</span><br><span>     s1 = s1.replace('&', '&amp;')</span><br><span>     s1 = s1.replace('<', '&lt;')</span><br><span>@@ -102,7 +106,7 @@</span><br><span>             return '"""%s"""' % s1</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-class MixedContainer:</span><br><span style="color: hsl(120, 100%, 40%);">+class MixedContainer(object):</span><br><span>     # Constants for category:</span><br><span>     CategoryNone = 0</span><br><span>     CategoryText = 1</span><br><span>@@ -462,7 +466,7 @@</span><br><span> """</span><br><span> </span><br><span> def usage():</span><br><span style="color: hsl(0, 100%, 40%);">-    print USAGE_TEXT</span><br><span style="color: hsl(120, 100%, 40%);">+    print(USAGE_TEXT)</span><br><span>     sys.exit(1)</span><br><span> </span><br><span> </span><br><span>@@ -520,4 +524,3 @@</span><br><span>     main()</span><br><span>     #import pdb</span><br><span>     #pdb.run('main()')</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>diff --git a/docs/doxygen/doxyxml/text.py b/docs/doxygen/doxyxml/text.py</span><br><span>index 629edd1..9cb7b4d 100644</span><br><span>--- a/docs/doxygen/doxyxml/text.py</span><br><span>+++ b/docs/doxygen/doxyxml/text.py</span><br><span>@@ -1,7 +1,8 @@</span><br><span> #</span><br><span> # Copyright 2010 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -21,12 +22,13 @@</span><br><span> """</span><br><span> Utilities for extracting text from generated classes.</span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span> </span><br><span> def is_string(txt):</span><br><span>     if isinstance(txt, str):</span><br><span>         return True</span><br><span>     try:</span><br><span style="color: hsl(0, 100%, 40%);">-        if isinstance(txt, unicode):</span><br><span style="color: hsl(120, 100%, 40%);">+        if isinstance(txt, str):</span><br><span>             return True</span><br><span>     except NameError:</span><br><span>         pass</span><br><span>@@ -49,7 +51,7 @@</span><br><span>     elif is_string(obj):</span><br><span>         return obj</span><br><span>     else:</span><br><span style="color: hsl(0, 100%, 40%);">-        raise StandardError('Expecting a string or something with content, content_ or value attribute')</span><br><span style="color: hsl(120, 100%, 40%);">+        raise Exception('Expecting a string or something with content, content_ or value attribute')</span><br><span>     # If this bit is a paragraph then add one some line breaks.</span><br><span>     if hasattr(obj, 'name') and obj.name == 'para':</span><br><span>         result += "\n\n"</span><br><span>diff --git a/docs/doxygen/swig_doc.py b/docs/doxygen/swig_doc.py</span><br><span>index 4e1ce2e..b9f4e6e 100644</span><br><span>--- a/docs/doxygen/swig_doc.py</span><br><span>+++ b/docs/doxygen/swig_doc.py</span><br><span>@@ -1,7 +1,8 @@</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2010,2011 Free Software Foundation, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright 2010-2012 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -26,14 +27,12 @@</span><br><span> python docstrings.</span><br><span> </span><br><span> """</span><br><span style="color: hsl(120, 100%, 40%);">+from __future__ import unicode_literals</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-import sys</span><br><span style="color: hsl(120, 100%, 40%);">+import sys, time</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-try:</span><br><span style="color: hsl(0, 100%, 40%);">-    from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base</span><br><span style="color: hsl(0, 100%, 40%);">-except ImportError:</span><br><span style="color: hsl(0, 100%, 40%);">-    from gnuradio.doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile, base</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+from doxyxml import DoxyIndex, DoxyClass, DoxyFriend, DoxyFunction, DoxyFile</span><br><span style="color: hsl(120, 100%, 40%);">+from doxyxml import DoxyOther, base</span><br><span> </span><br><span> def py_name(name):</span><br><span>     bits = name.split('_')</span><br><span>@@ -56,18 +55,41 @@</span><br><span>         # Check for a parsing error.</span><br><span>         if item.error():</span><br><span>             return False</span><br><span style="color: hsl(0, 100%, 40%);">-        return item.has_member(make_name(item.name()), DoxyFriend)</span><br><span style="color: hsl(120, 100%, 40%);">+        friendname = make_name(item.name())</span><br><span style="color: hsl(120, 100%, 40%);">+        is_a_block = item.has_member(friendname, DoxyFriend)</span><br><span style="color: hsl(120, 100%, 40%);">+        # But now sometimes the make function isn't a friend so check again.</span><br><span style="color: hsl(120, 100%, 40%);">+        if not is_a_block:</span><br><span style="color: hsl(120, 100%, 40%);">+            is_a_block = di.has_member(friendname, DoxyFunction)</span><br><span style="color: hsl(120, 100%, 40%);">+        return is_a_block</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class Block2(object):</span><br><span style="color: hsl(120, 100%, 40%);">+    """</span><br><span style="color: hsl(120, 100%, 40%);">+    Checks if doxyxml produced objects correspond to a new style</span><br><span style="color: hsl(120, 100%, 40%);">+    gnuradio block.</span><br><span style="color: hsl(120, 100%, 40%);">+    """</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    @classmethod</span><br><span style="color: hsl(120, 100%, 40%);">+    def includes(cls, item):</span><br><span style="color: hsl(120, 100%, 40%);">+        if not isinstance(item, DoxyClass):</span><br><span style="color: hsl(120, 100%, 40%);">+            return False</span><br><span style="color: hsl(120, 100%, 40%);">+        # Check for a parsing error.</span><br><span style="color: hsl(120, 100%, 40%);">+        if item.error():</span><br><span style="color: hsl(120, 100%, 40%);">+            return False</span><br><span style="color: hsl(120, 100%, 40%);">+        is_a_block2 = item.has_member('make', DoxyFunction) and item.has_member('sptr', DoxyOther)</span><br><span style="color: hsl(120, 100%, 40%);">+        return is_a_block2</span><br><span> </span><br><span> </span><br><span> def utoascii(text):</span><br><span>     """</span><br><span style="color: hsl(0, 100%, 40%);">-    Convert unicode text into ascii and escape quotes.</span><br><span style="color: hsl(120, 100%, 40%);">+    Convert unicode text into ascii and escape quotes and backslashes.</span><br><span>     """</span><br><span>     if text is None:</span><br><span>         return ''</span><br><span>     out = text.encode('ascii', 'replace')</span><br><span style="color: hsl(0, 100%, 40%);">-    out = out.replace('"', '\\"')</span><br><span style="color: hsl(0, 100%, 40%);">-    return out</span><br><span style="color: hsl(120, 100%, 40%);">+    # swig will require us to replace blackslash with 4 backslashes</span><br><span style="color: hsl(120, 100%, 40%);">+    out = out.replace(b'\\', b'\\\\\\\\')</span><br><span style="color: hsl(120, 100%, 40%);">+    out = out.replace(b'"', b'\\"').decode('ascii')</span><br><span style="color: hsl(120, 100%, 40%);">+    return str(out)</span><br><span> </span><br><span> </span><br><span> def combine_descriptions(obj):</span><br><span>@@ -83,9 +105,15 @@</span><br><span>         description.append(dd)</span><br><span>     return utoascii('\n\n'.join(description)).strip()</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+def format_params(parameteritems):</span><br><span style="color: hsl(120, 100%, 40%);">+    output = ['Args:']</span><br><span style="color: hsl(120, 100%, 40%);">+    template = '    {0} : {1}'</span><br><span style="color: hsl(120, 100%, 40%);">+    for pi in parameteritems:</span><br><span style="color: hsl(120, 100%, 40%);">+        output.append(template.format(pi.name, pi.description))</span><br><span style="color: hsl(120, 100%, 40%);">+    return '\n'.join(output)</span><br><span> </span><br><span> entry_templ = '%feature("docstring") {name} "{docstring}"'</span><br><span style="color: hsl(0, 100%, 40%);">-def make_entry(obj, name=None, templ="{description}", description=None):</span><br><span style="color: hsl(120, 100%, 40%);">+def make_entry(obj, name=None, templ="{description}", description=None, params=[]):</span><br><span>     """</span><br><span>     Create a docstring entry for a swig interface file.</span><br><span> </span><br><span>@@ -102,6 +130,9 @@</span><br><span>         return ''</span><br><span>     if description is None:</span><br><span>         description = combine_descriptions(obj)</span><br><span style="color: hsl(120, 100%, 40%);">+    if params:</span><br><span style="color: hsl(120, 100%, 40%);">+        description += '\n\n'</span><br><span style="color: hsl(120, 100%, 40%);">+        description += utoascii(format_params(params))</span><br><span>     docstring = templ.format(description=description)</span><br><span>     if not docstring:</span><br><span>         return ''</span><br><span>@@ -121,27 +152,31 @@</span><br><span>             used as the description instead of extracting it from func.</span><br><span>     params - a parameter list that overrides using func.params.</span><br><span>     """</span><br><span style="color: hsl(0, 100%, 40%);">-    if params is None:</span><br><span style="color: hsl(0, 100%, 40%);">-        params = func.params</span><br><span style="color: hsl(0, 100%, 40%);">-    params = [prm.declname for prm in params]</span><br><span style="color: hsl(0, 100%, 40%);">-    if params:</span><br><span style="color: hsl(0, 100%, 40%);">-        sig = "Params: (%s)" % ", ".join(params)</span><br><span style="color: hsl(0, 100%, 40%);">-    else:</span><br><span style="color: hsl(0, 100%, 40%);">-        sig = "Params: (NONE)"</span><br><span style="color: hsl(0, 100%, 40%);">-    templ = "{description}\n\n" + sig</span><br><span style="color: hsl(0, 100%, 40%);">-    return make_entry(func, name=name, templ=utoascii(templ),</span><br><span style="color: hsl(0, 100%, 40%);">-                      description=description)</span><br><span style="color: hsl(120, 100%, 40%);">+    #if params is None:</span><br><span style="color: hsl(120, 100%, 40%);">+    #    params = func.params</span><br><span style="color: hsl(120, 100%, 40%);">+    #params = [prm.declname for prm in params]</span><br><span style="color: hsl(120, 100%, 40%);">+    #if params:</span><br><span style="color: hsl(120, 100%, 40%);">+    #    sig = "Params: (%s)" % ", ".join(params)</span><br><span style="color: hsl(120, 100%, 40%);">+    #else:</span><br><span style="color: hsl(120, 100%, 40%);">+    #    sig = "Params: (NONE)"</span><br><span style="color: hsl(120, 100%, 40%);">+    #templ = "{description}\n\n" + sig</span><br><span style="color: hsl(120, 100%, 40%);">+    #return make_entry(func, name=name, templ=utoascii(templ),</span><br><span style="color: hsl(120, 100%, 40%);">+    #                  description=description)</span><br><span style="color: hsl(120, 100%, 40%);">+    return make_entry(func, name=name, description=description, params=params)</span><br><span> </span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-def make_class_entry(klass, description=None):</span><br><span style="color: hsl(120, 100%, 40%);">+def make_class_entry(klass, description=None, ignored_methods=[], params=None):</span><br><span>     """</span><br><span>     Create a class docstring for a swig interface file.</span><br><span>     """</span><br><span style="color: hsl(120, 100%, 40%);">+    if params is None:</span><br><span style="color: hsl(120, 100%, 40%);">+        params = klass.params</span><br><span>     output = []</span><br><span style="color: hsl(0, 100%, 40%);">-    output.append(make_entry(klass, description=description))</span><br><span style="color: hsl(120, 100%, 40%);">+    output.append(make_entry(klass, description=description, params=params))</span><br><span>     for func in klass.in_category(DoxyFunction):</span><br><span style="color: hsl(0, 100%, 40%);">-        name = klass.name() + '::' + func.name()</span><br><span style="color: hsl(0, 100%, 40%);">-        output.append(make_func_entry(func, name=name))</span><br><span style="color: hsl(120, 100%, 40%);">+        if func.name() not in ignored_methods:</span><br><span style="color: hsl(120, 100%, 40%);">+            name = klass.name() + '::' + func.name()</span><br><span style="color: hsl(120, 100%, 40%);">+            output.append(make_func_entry(func, name=name))</span><br><span>     return "\n\n".join(output)</span><br><span> </span><br><span> </span><br><span>@@ -175,11 +210,33 @@</span><br><span>     # the make function.</span><br><span>     output = []</span><br><span>     output.append(make_class_entry(block, description=super_description))</span><br><span style="color: hsl(0, 100%, 40%);">-    creator = block.get_member(block.name(), DoxyFunction)</span><br><span>     output.append(make_func_entry(make_func, description=super_description,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  params=creator.params))</span><br><span style="color: hsl(120, 100%, 40%);">+                                  params=block.params))</span><br><span>     return "\n\n".join(output)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+def make_block2_entry(di, block):</span><br><span style="color: hsl(120, 100%, 40%);">+    """</span><br><span style="color: hsl(120, 100%, 40%);">+    Create class and function docstrings of a new style gnuradio block for a</span><br><span style="color: hsl(120, 100%, 40%);">+    swig interface file.</span><br><span style="color: hsl(120, 100%, 40%);">+    """</span><br><span style="color: hsl(120, 100%, 40%);">+    descriptions = []</span><br><span style="color: hsl(120, 100%, 40%);">+    # For new style blocks all the relevant documentation should be</span><br><span style="color: hsl(120, 100%, 40%);">+    # associated with the 'make' method.</span><br><span style="color: hsl(120, 100%, 40%);">+    class_description = combine_descriptions(block)</span><br><span style="color: hsl(120, 100%, 40%);">+    make_func = block.get_member('make', DoxyFunction)</span><br><span style="color: hsl(120, 100%, 40%);">+    make_description = combine_descriptions(make_func)</span><br><span style="color: hsl(120, 100%, 40%);">+    description = class_description + "\n\nConstructor Specific Documentation:\n\n" + make_description</span><br><span style="color: hsl(120, 100%, 40%);">+    # Associate the combined description with the class and</span><br><span style="color: hsl(120, 100%, 40%);">+    # the make function.</span><br><span style="color: hsl(120, 100%, 40%);">+    output = []</span><br><span style="color: hsl(120, 100%, 40%);">+    output.append(make_class_entry(</span><br><span style="color: hsl(120, 100%, 40%);">+            block, description=description,</span><br><span style="color: hsl(120, 100%, 40%);">+            ignored_methods=['make'], params=make_func.params))</span><br><span style="color: hsl(120, 100%, 40%);">+    makename = block.name() + '::make'</span><br><span style="color: hsl(120, 100%, 40%);">+    output.append(make_func_entry(</span><br><span style="color: hsl(120, 100%, 40%);">+            make_func, name=makename, description=description,</span><br><span style="color: hsl(120, 100%, 40%);">+            params=make_func.params))</span><br><span style="color: hsl(120, 100%, 40%);">+    return "\n\n".join(output)</span><br><span> </span><br><span> def make_swig_interface_file(di, swigdocfilename, custom_output=None):</span><br><span> </span><br><span>@@ -196,39 +253,59 @@</span><br><span> </span><br><span>     # Create docstrings for the blocks.</span><br><span>     blocks = di.in_category(Block)</span><br><span style="color: hsl(120, 100%, 40%);">+    blocks2 = di.in_category(Block2)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     make_funcs = set([])</span><br><span>     for block in blocks:</span><br><span>         try:</span><br><span>             make_func = di.get_member(make_name(block.name()), DoxyFunction)</span><br><span style="color: hsl(0, 100%, 40%);">-            make_funcs.add(make_func.name())</span><br><span style="color: hsl(0, 100%, 40%);">-            output.append(make_block_entry(di, block))</span><br><span style="color: hsl(120, 100%, 40%);">+            # Don't want to risk writing to output twice.</span><br><span style="color: hsl(120, 100%, 40%);">+            if make_func.name() not in make_funcs:</span><br><span style="color: hsl(120, 100%, 40%);">+                make_funcs.add(make_func.name())</span><br><span style="color: hsl(120, 100%, 40%);">+                output.append(make_block_entry(di, block))</span><br><span>         except block.ParsingError:</span><br><span style="color: hsl(0, 100%, 40%);">-            print('Parsing error for block %s' % block.name())</span><br><span style="color: hsl(120, 100%, 40%);">+            sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))</span><br><span style="color: hsl(120, 100%, 40%);">+            raise</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    for block in blocks2:</span><br><span style="color: hsl(120, 100%, 40%);">+        try:</span><br><span style="color: hsl(120, 100%, 40%);">+            make_func = block.get_member('make', DoxyFunction)</span><br><span style="color: hsl(120, 100%, 40%);">+            make_func_name = block.name() +'::make'</span><br><span style="color: hsl(120, 100%, 40%);">+            # Don't want to risk writing to output twice.</span><br><span style="color: hsl(120, 100%, 40%);">+            if make_func_name not in make_funcs:</span><br><span style="color: hsl(120, 100%, 40%);">+                make_funcs.add(make_func_name)</span><br><span style="color: hsl(120, 100%, 40%);">+                output.append(make_block2_entry(di, block))</span><br><span style="color: hsl(120, 100%, 40%);">+        except block.ParsingError:</span><br><span style="color: hsl(120, 100%, 40%);">+            sys.stderr.write('Parsing error for block {0}\n'.format(block.name()))</span><br><span style="color: hsl(120, 100%, 40%);">+            raise</span><br><span> </span><br><span>     # Create docstrings for functions</span><br><span>     # Don't include the make functions since they have already been dealt with.</span><br><span style="color: hsl(0, 100%, 40%);">-    funcs = [f for f in di.in_category(DoxyFunction) if f.name() not in make_funcs]</span><br><span style="color: hsl(120, 100%, 40%);">+    funcs = [f for f in di.in_category(DoxyFunction)</span><br><span style="color: hsl(120, 100%, 40%);">+             if f.name() not in make_funcs and not f.name().startswith('std::')]</span><br><span>     for f in funcs:</span><br><span>         try:</span><br><span>             output.append(make_func_entry(f))</span><br><span>         except f.ParsingError:</span><br><span style="color: hsl(0, 100%, 40%);">-            print('Parsing error for function %s' % f.name())</span><br><span style="color: hsl(120, 100%, 40%);">+            sys.stderr.write('Parsing error for function {0}\n'.format(f.name()))</span><br><span> </span><br><span>     # Create docstrings for classes</span><br><span>     block_names = [block.name() for block in blocks]</span><br><span style="color: hsl(0, 100%, 40%);">-    klasses = [k for k in di.in_category(DoxyClass) if k.name() not in block_names]</span><br><span style="color: hsl(120, 100%, 40%);">+    block_names += [block.name() for block in blocks2]</span><br><span style="color: hsl(120, 100%, 40%);">+    klasses = [k for k in di.in_category(DoxyClass)</span><br><span style="color: hsl(120, 100%, 40%);">+               if k.name() not in block_names and not k.name().startswith('std::')]</span><br><span>     for k in klasses:</span><br><span>         try:</span><br><span>             output.append(make_class_entry(k))</span><br><span>         except k.ParsingError:</span><br><span style="color: hsl(0, 100%, 40%);">-            print('Parsing error for class %s' % k.name())</span><br><span style="color: hsl(120, 100%, 40%);">+            sys.stderr.write('Parsing error for class {0}\n'.format(k.name()))</span><br><span> </span><br><span>     # Docstrings are not created for anything that is not a function or a class.</span><br><span>     # If this excludes anything important please add it here.</span><br><span> </span><br><span>     output = "\n\n".join(output)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    swig_doc = file(swigdocfilename, 'w')</span><br><span style="color: hsl(120, 100%, 40%);">+    swig_doc = open(swigdocfilename, 'w')</span><br><span>     swig_doc.write(output)</span><br><span>     swig_doc.close()</span><br><span> </span><br><span>@@ -236,7 +313,7 @@</span><br><span>     # Parse command line options and set up doxyxml.</span><br><span>     err_msg = "Execute using: python swig_doc.py xml_path outputfilename"</span><br><span>     if len(sys.argv) != 3:</span><br><span style="color: hsl(0, 100%, 40%);">-        raise StandardError(err_msg)</span><br><span style="color: hsl(120, 100%, 40%);">+        raise Exception(err_msg)</span><br><span>     xml_path = sys.argv[1]</span><br><span>     swigdocfilename = sys.argv[2]</span><br><span>     di = DoxyIndex(xml_path)</span><br><span>diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt</span><br><span>index 0f2c629..e7dae14 100644</span><br><span>--- a/lib/CMakeLists.txt</span><br><span>+++ b/lib/CMakeLists.txt</span><br><span>@@ -1,6 +1,7 @@</span><br><span style="color: hsl(0, 100%, 40%);">-# Copyright 2011,2012 Free Software Foundation, Inc.</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright 2011,2012,2016,2018,2019 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -17,8 +18,10 @@</span><br><span> # the Free Software Foundation, Inc., 51 Franklin Street,</span><br><span> # Boston, MA 02110-1301, USA.</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Setup library</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span> include(GrPlatform) #define LIB_SUFFIX</span><br><span style="color: hsl(0, 100%, 40%);">-include(GrMiscUtils)</span><br><span> </span><br><span> ########################################################################</span><br><span> # Add sources macro</span><br><span>@@ -44,7 +47,7 @@</span><br><span> # Handle the generated constants</span><br><span> ########################################################################</span><br><span> execute_process(COMMAND ${PYTHON_EXECUTABLE} -c</span><br><span style="color: hsl(0, 100%, 40%);">-    "import time;print time.strftime('%a, %d %b %Y %H:%M:%S', time.gmtime())"</span><br><span style="color: hsl(120, 100%, 40%);">+    "import time;print(time.strftime('%a, %d %b %Y %H:%M:%S', time.gmtime()))"</span><br><span>     OUTPUT_VARIABLE BUILD_DATE OUTPUT_STRIP_TRAILING_WHITESPACE</span><br><span> )</span><br><span> message(STATUS "Loading build date ${BUILD_DATE} into constants...")</span><br><span>@@ -73,69 +76,68 @@</span><br><span> add_subdirectory(transmitter)</span><br><span> add_subdirectory(trx)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-# Setup library</span><br><span style="color: hsl(0, 100%, 40%);">-########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-include_directories(${Boost_INCLUDE_DIR} receiver)</span><br><span style="color: hsl(0, 100%, 40%);">-link_directories(${Boost_LIBRARY_DIRS})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-set(grgsm_link_libraries "")</span><br><span style="color: hsl(0, 100%, 40%);">-list (APPEND grgsm_link_libraries ${Boost_LIBRARIES})</span><br><span style="color: hsl(0, 100%, 40%);">-list (APPEND grgsm_link_libraries ${GNURADIO_ALL_LIBRARIES})</span><br><span style="color: hsl(0, 100%, 40%);">-list (APPEND grgsm_link_libraries ${VOLK_LIBRARIES})</span><br><span style="color: hsl(0, 100%, 40%);">-if(WIN32)</span><br><span style="color: hsl(0, 100%, 40%);">-    list (APPEND grgsm_link_libraries wsock32)</span><br><span style="color: hsl(0, 100%, 40%);">-    list (APPEND grgsm_link_libraries ws2_32)</span><br><span style="color: hsl(0, 100%, 40%);">-endif()</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> if(NOT LOCAL_OSMOCOM)</span><br><span>     list (APPEND grgsm_link_libraries ${LIBOSMOCORE_LIBRARIES} ${LIBOSMOCODEC_LIBRARIES} ${LIBOSMOGSM_LIBRARY})</span><br><span>     if(LIBOSMOCODING_FOUND)</span><br><span style="color: hsl(0, 100%, 40%);">-        list (APPEND grgsm_link_libraries ${LIBOSMOCODING_LIBRARIES})</span><br><span style="color: hsl(120, 100%, 40%);">+        list (APPEND grgsm_link_libraries</span><br><span style="color: hsl(120, 100%, 40%);">+           ${LIBOSMOCODING_LIBRARIES}</span><br><span style="color: hsl(120, 100%, 40%);">+      )</span><br><span style="color: hsl(120, 100%, 40%);">+        list (APPEND grgsm_include_directories</span><br><span style="color: hsl(120, 100%, 40%);">+           ${LIBOSMOCORE_INCLUDE_DIR}</span><br><span style="color: hsl(120, 100%, 40%);">+        )</span><br><span>     endif()</span><br><span> endif()</span><br><span> </span><br><span> add_library(grgsm SHARED ${grgsm_sources})</span><br><span style="color: hsl(0, 100%, 40%);">-target_link_libraries(grgsm ${grgsm_link_libraries}</span><br><span style="color: hsl(0, 100%, 40%);">-# libraries required by plotting.h - have troubles to be installed by pybombs</span><br><span style="color: hsl(0, 100%, 40%);">-#    boost_iostreams</span><br><span style="color: hsl(0, 100%, 40%);">-#    boost_system</span><br><span style="color: hsl(0, 100%, 40%);">-#    boost_filesystem</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+target_link_libraries(grgsm gnuradio::gnuradio-runtime gnuradio::gnuradio-filter volk osmocoding)</span><br><span style="color: hsl(120, 100%, 40%);">+target_include_directories(grgsm</span><br><span style="color: hsl(120, 100%, 40%);">+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../include></span><br><span style="color: hsl(120, 100%, 40%);">+    PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/receiver></span><br><span style="color: hsl(120, 100%, 40%);">+    PUBLIC $<BUILD_INTERFACE:${Boost_INCLUDE_DIR}></span><br><span style="color: hsl(120, 100%, 40%);">+    PUBLIC $<INSTALL_INTERFACE:include></span><br><span style="color: hsl(120, 100%, 40%);">+  )</span><br><span> set_target_properties(grgsm PROPERTIES DEFINE_SYMBOL "grgsm_EXPORTS")</span><br><span style="color: hsl(0, 100%, 40%);">-GR_LIBRARY_FOO(grgsm)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+if(APPLE)</span><br><span style="color: hsl(120, 100%, 40%);">+    set_target_properties(grgsm PROPERTIES</span><br><span style="color: hsl(120, 100%, 40%);">+        INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"</span><br><span style="color: hsl(120, 100%, 40%);">+    )</span><br><span style="color: hsl(120, 100%, 40%);">+endif(APPLE)</span><br><span> </span><br><span> ########################################################################</span><br><span> # Install built library files</span><br><span> ########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-install(TARGETS grgsm</span><br><span style="color: hsl(0, 100%, 40%);">-    LIBRARY DESTINATION lib${LIB_SUFFIX} # .so/.dylib file</span><br><span style="color: hsl(0, 100%, 40%);">-    ARCHIVE DESTINATION lib${LIB_SUFFIX} # .lib file</span><br><span style="color: hsl(0, 100%, 40%);">-    RUNTIME DESTINATION bin              # .dll file</span><br><span style="color: hsl(0, 100%, 40%);">-)</span><br><span style="color: hsl(120, 100%, 40%);">+include(GrMiscUtils)</span><br><span style="color: hsl(120, 100%, 40%);">+GR_LIBRARY_FOO(grgsm)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Print summary</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+message(STATUS "Using install prefix: ${CMAKE_INSTALL_PREFIX}")</span><br><span style="color: hsl(120, 100%, 40%);">+message(STATUS "Building for version: ${VERSION} / ${LIBVER}")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+set (grgsm_sources ${grgsm_sources} PARENT_SCOPE)</span><br><span> </span><br><span> ########################################################################</span><br><span> # Build and register unit test</span><br><span> ########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-#include(GrTest)</span><br><span style="color: hsl(120, 100%, 40%);">+include(GrTest)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#include_directories(${CPPUNIT_INCLUDE_DIRS})</span><br><span style="color: hsl(120, 100%, 40%);">+# If your unit tests require special include paths, add them here</span><br><span style="color: hsl(120, 100%, 40%);">+#include_directories()</span><br><span style="color: hsl(120, 100%, 40%);">+# List all files that contain Boost.UTF unit tests here</span><br><span style="color: hsl(120, 100%, 40%);">+list(APPEND test_gsm_sources</span><br><span style="color: hsl(120, 100%, 40%);">+)</span><br><span style="color: hsl(120, 100%, 40%);">+# Anything we need to link to for the unit tests go here</span><br><span style="color: hsl(120, 100%, 40%);">+list(APPEND GR_TEST_TARGET_DEPS grgsm)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#list(APPEND test_grgsm_sources</span><br><span style="color: hsl(0, 100%, 40%);">-#    ${CMAKE_CURRENT_SOURCE_DIR}/test_gsm.cc</span><br><span style="color: hsl(0, 100%, 40%);">-#    ${CMAKE_CURRENT_SOURCE_DIR}/qa_gsm.cc</span><br><span style="color: hsl(0, 100%, 40%);">-#    ${CMAKE_CURRENT_SOURCE_DIR}/qa_receiver.cc</span><br><span style="color: hsl(0, 100%, 40%);">-#)</span><br><span style="color: hsl(120, 100%, 40%);">+if(NOT test_gsm_sources)</span><br><span style="color: hsl(120, 100%, 40%);">+    MESSAGE(STATUS "No C++ unit tests... skipping")</span><br><span style="color: hsl(120, 100%, 40%);">+    return()</span><br><span style="color: hsl(120, 100%, 40%);">+endif(NOT test_gsm_sources)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-#add_executable(test-gsm ${test_grgsm_sources})</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#target_link_libraries(</span><br><span style="color: hsl(0, 100%, 40%);">-#  test-gsm</span><br><span style="color: hsl(0, 100%, 40%);">-#  ${GNURADIO_RUNTIME_LIBRARIES}</span><br><span style="color: hsl(0, 100%, 40%);">-#  ${Boost_LIBRARIES}</span><br><span style="color: hsl(0, 100%, 40%);">-#  ${CPPUNIT_LIBRARIES}</span><br><span style="color: hsl(0, 100%, 40%);">-#  grgsm</span><br><span style="color: hsl(0, 100%, 40%);">-#)</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-#GR_ADD_TEST(test_gsm test-gsm)</span><br><span style="color: hsl(120, 100%, 40%);">+foreach(qa_file ${test_gsm_sources})</span><br><span style="color: hsl(120, 100%, 40%);">+    GR_ADD_CPP_TEST("gsm_${qa_file}"</span><br><span style="color: hsl(120, 100%, 40%);">+        ${CMAKE_CURRENT_SOURCE_DIR}/${qa_file}</span><br><span style="color: hsl(120, 100%, 40%);">+    )</span><br><span style="color: hsl(120, 100%, 40%);">+endforeach(qa_file)</span><br><span>diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt</span><br><span>index 97cb0a3..f0c984d 100644</span><br><span>--- a/python/CMakeLists.txt</span><br><span>+++ b/python/CMakeLists.txt</span><br><span>@@ -1,6 +1,7 @@</span><br><span> # Copyright 2011 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -36,7 +37,8 @@</span><br><span> </span><br><span> GR_PYTHON_INSTALL(</span><br><span>     FILES</span><br><span style="color: hsl(0, 100%, 40%);">-    __init__.py DESTINATION ${GR_PYTHON_DIR}/grgsm</span><br><span style="color: hsl(120, 100%, 40%);">+    __init__.py</span><br><span style="color: hsl(120, 100%, 40%);">+    DESTINATION ${GR_PYTHON_DIR}/grgsm</span><br><span> )</span><br><span> </span><br><span> ########################################################################</span><br><span>diff --git a/python/__init__.py b/python/__init__.py</span><br><span>index e2905e8..8241b01 100644</span><br><span>--- a/python/__init__.py</span><br><span>+++ b/python/__init__.py</span><br><span>@@ -31,9 +31,9 @@</span><br><span>     from dl import RTLD_GLOBAL as _RTLD_GLOBAL</span><br><span> except ImportError:</span><br><span>     try:</span><br><span style="color: hsl(0, 100%, 40%);">-        from DLFCN import RTLD_GLOBAL as _RTLD_GLOBAL</span><br><span style="color: hsl(120, 100%, 40%);">+        from DLFCN import RTLD_GLOBAL as _RTLD_GLOBAL</span><br><span>     except ImportError:</span><br><span style="color: hsl(0, 100%, 40%);">- pass</span><br><span style="color: hsl(120, 100%, 40%);">+        pass</span><br><span> </span><br><span> if _RTLD_GLOBAL != 0:</span><br><span>     _dlopenflags = sys.getdlopenflags()</span><br><span>diff --git a/python/misc_utils/fn_time.py b/python/misc_utils/fn_time.py</span><br><span>index 96314b8..17c6295 100644</span><br><span>--- a/python/misc_utils/fn_time.py</span><br><span>+++ b/python/misc_utils/fn_time.py</span><br><span>@@ -83,10 +83,10 @@</span><br><span>         fn_delta, time2_precise = fn_time_delta(fn1, time1, fn2, time2_err, ts_x, ts_ref)</span><br><span>         time2_precise_cpp = fn_time_delta_cpp(fn1, (int(time1),time1-int(time1)), fn2, (int(time2_err),time2_err-int(time2_err)), ts_x, ts_ref)</span><br><span>         if fn_delta != fn2-fn1:</span><br><span style="color: hsl(0, 100%, 40%);">-            print "bad fn:", fn2, error#, 'fn_delta:'+str(fn_delta), time2, error, frames_diff_h4, (time2-time1)/(__hyper_frame*__frame_period), time_diff_hint_h4_prev, time_diff_hint</span><br><span style="color: hsl(120, 100%, 40%);">+            print("bad fn:", fn2, error)#, 'fn_delta:'+str(fn_delta), time2, error, frames_diff_h4, (time2-time1)/(__hyper_frame*__frame_period), time_diff_hint_h4_prev, time_diff_hint</span><br><span> #        time_diff_hint = time2 - time2_precise</span><br><span>         time_diff_hint = time2_precise_cpp[0]+time2_precise_cpp[1] - time2_precise</span><br><span> </span><br><span>         if abs(time_diff_hint) > 0.0001:</span><br><span style="color: hsl(0, 100%, 40%);">-            print "time2_precise_cpp",time2_precise_cpp," time2_precise",time2_precise," time_ref",time1," time_hint",time2_err</span><br><span style="color: hsl(0, 100%, 40%);">-            print ""</span><br><span style="color: hsl(120, 100%, 40%);">+            print("time2_precise_cpp",time2_precise_cpp," time2_precise",time2_precise," time_ref",time1," time_hint",time2_err)</span><br><span style="color: hsl(120, 100%, 40%);">+            print("")</span><br><span>diff --git a/python/qa_burst_printer.py b/python/qa_burst_printer.py</span><br><span>index a3d50d5..c1fdfaf 100755</span><br><span>--- a/python/qa_burst_printer.py</span><br><span>+++ b/python/qa_burst_printer.py</span><br><span>@@ -52,7 +52,7 @@</span><br><span>         out = ""</span><br><span>         for l in expected_lines:</span><br><span>             out = out + l + "\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        return out</span><br><span style="color: hsl(120, 100%, 40%);">+        return out.encode('utf-8')</span><br><span> </span><br><span>     def test_001_complete_bursts_prefix (self):</span><br><span>         """</span><br><span>diff --git a/python/qa_message_printer.py b/python/qa_message_printer.py</span><br><span>index 6bc9a20..21e6852 100755</span><br><span>--- a/python/qa_message_printer.py</span><br><span>+++ b/python/qa_message_printer.py</span><br><span>@@ -52,7 +52,7 @@</span><br><span>         out = ""</span><br><span>         for l in expected_lines:</span><br><span>             out = out + l + "\n"</span><br><span style="color: hsl(0, 100%, 40%);">-        return out</span><br><span style="color: hsl(120, 100%, 40%);">+        return out.encode('utf-8')</span><br><span>         </span><br><span>     def test_001_no_prefix_no_header (self):</span><br><span>         """</span><br><span>diff --git a/python/receiver/fcch_burst_tagger.py b/python/receiver/fcch_burst_tagger.py</span><br><span>index fc427a7..a460740 100644</span><br><span>--- a/python/receiver/fcch_burst_tagger.py</span><br><span>+++ b/python/receiver/fcch_burst_tagger.py</span><br><span>@@ -81,9 +81,9 @@</span><br><span> #                measured_freq = mean(inst_freq[precise_idx:precise_idx+self.processed_block_size])</span><br><span>                 expected_freq = self.symbol_rate/4</span><br><span>                 </span><br><span style="color: hsl(0, 100%, 40%);">-                print "input_items:",len(in0)</span><br><span style="color: hsl(0, 100%, 40%);">-                print "coarse_idx",coarse_idx</span><br><span style="color: hsl(0, 100%, 40%);">-                print "coarse_idx+precise_idx",coarse_idx+precise_idx</span><br><span style="color: hsl(120, 100%, 40%);">+                print("input_items:",len(in0))</span><br><span style="color: hsl(120, 100%, 40%);">+                print("coarse_idx",coarse_idx)</span><br><span style="color: hsl(120, 100%, 40%);">+                print("coarse_idx+precise_idx",coarse_idx+precise_idx)</span><br><span>                 </span><br><span>                 zoomed_spectrum = abs(self.zoomfft(in0[coarse_idx+precise_idx:coarse_idx+precise_idx+self.processed_block_size]))</span><br><span>                 measured_freq = self.f_axis[argmax(zoomed_spectrum)]</span><br><span>@@ -97,9 +97,9 @@</span><br><span> #   Some additional plots and prints for debugging</span><br><span> #                print "coarse_idx+precise_idx",coarse_idx+precise_idx</span><br><span> #                print "offset-self.nitems_written(0):",offset-self.nitems_written(0)</span><br><span style="color: hsl(0, 100%, 40%);">-                print offset-self.prev_offset</span><br><span style="color: hsl(120, 100%, 40%);">+                print(offset-self.prev_offset)</span><br><span>                 self.prev_offset=offset</span><br><span style="color: hsl(0, 100%, 40%);">-                print "freq offset", freq_offset</span><br><span style="color: hsl(120, 100%, 40%);">+                print("freq offset", freq_offset)</span><br><span> #                freq_offset = measured_freq - expected_freq</span><br><span> #                plot(self.f_axis, zoomed_spectrum)</span><br><span> #                show()</span><br><span>diff --git a/python/receiver/sch_detector.py b/python/receiver/sch_detector.py</span><br><span>index d3587d1..626e37d 100644</span><br><span>--- a/python/receiver/sch_detector.py</span><br><span>+++ b/python/receiver/sch_detector.py</span><br><span>@@ -57,10 +57,10 @@</span><br><span>         correlation_bl = correlation_bl/len(self.sync_seq_msk)</span><br><span>         power_bl_mov_avg = uniform_filter1d(abs(correlation_bl)**2,self.L+1,mode='constant',axis=0)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        print "correlation_bl.argmax()",argmax(abs(correlation_bl))</span><br><span style="color: hsl(0, 100%, 40%);">-        print "power_bl_mov_avg.argmax()",(power_bl_mov_avg).argmax()</span><br><span style="color: hsl(0, 100%, 40%);">-        print 'unravel_index(correlation_bl.argmax(), correlation_bl.shape)',unravel_index(argmax(abs(correlation_bl)), correlation_bl.shape)</span><br><span style="color: hsl(0, 100%, 40%);">-        print 'unravel_index(power_bl_mov_avg.argmax(), power_bl_mov_avg.shape)',unravel_index(power_bl_mov_avg.argmax(), power_bl_mov_avg.shape)</span><br><span style="color: hsl(120, 100%, 40%);">+        print("correlation_bl.argmax()",argmax(abs(correlation_bl)))</span><br><span style="color: hsl(120, 100%, 40%);">+        print("power_bl_mov_avg.argmax()",(power_bl_mov_avg).argmax())</span><br><span style="color: hsl(120, 100%, 40%);">+        print('unravel_index(correlation_bl.argmax(), correlation_bl.shape)',unravel_index(argmax(abs(correlation_bl)), correlation_bl.shape))</span><br><span style="color: hsl(120, 100%, 40%);">+        print('unravel_index(power_bl_mov_avg.argmax(), power_bl_mov_avg.shape)',unravel_index(power_bl_mov_avg.argmax(), power_bl_mov_avg.shape))</span><br><span>         (r_corrmax, c_corrmax)=unravel_index(argmax(abs(correlation_bl)), correlation_bl.shape)</span><br><span>         (r_powmax, c_powmax)=unravel_index(power_bl_mov_avg.argmax(), power_bl_mov_avg.shape)</span><br><span>         </span><br><span>@@ -79,7 +79,7 @@</span><br><span> #                plot(range(ii,len(correlation_bl[:,0])*self.OSR,self.OSR),power_bl_mov_avg[:,ii]*5e6,'r.')</span><br><span> #        show()</span><br><span> #        figure()</span><br><span style="color: hsl(0, 100%, 40%);">-        print 'r_powmax: ',r_powmax</span><br><span style="color: hsl(120, 100%, 40%);">+        print('r_powmax: ',r_powmax)</span><br><span> #        plot(abs(correlation_bl[range(r_powmax-(self.L+1)/2+1,r_powmax+(self.L+1)/2+1), c_powmax]),'g')</span><br><span> #        hold(True)</span><br><span> #        plot(abs(correlation_bl[range(r_corrmax-(self.L+1)/2+1,r_corrmax+(self.L+1)/2+1), c_corrmax]),'r')</span><br><span>diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt</span><br><span>index 4766220..5f1e020 100644</span><br><span>--- a/swig/CMakeLists.txt</span><br><span>+++ b/swig/CMakeLists.txt</span><br><span>@@ -1,6 +1,7 @@</span><br><span> # Copyright 2011 Free Software Foundation, Inc.</span><br><span> #</span><br><span style="color: hsl(0, 100%, 40%);">-# This file is part of GNU Radio</span><br><span style="color: hsl(120, 100%, 40%);">+# This file was generated by gr_modtool, a tool from the GNU Radio framework</span><br><span style="color: hsl(120, 100%, 40%);">+# This file is a part of gr-gsm</span><br><span> #</span><br><span> # GNU Radio is free software; you can redistribute it and/or modify</span><br><span> # it under the terms of the GNU General Public License as published by</span><br><span>@@ -18,31 +19,32 @@</span><br><span> # Boston, MA 02110-1301, USA.</span><br><span> </span><br><span> ########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+# Check if there is C++ code at all</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span style="color: hsl(120, 100%, 40%);">+if(NOT grgsm_sources)</span><br><span style="color: hsl(120, 100%, 40%);">+    MESSAGE(STATUS "No C++ sources... skipping swig/")</span><br><span style="color: hsl(120, 100%, 40%);">+    return()</span><br><span style="color: hsl(120, 100%, 40%);">+endif(NOT grgsm_sources)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+########################################################################</span><br><span> # Include swig generation macros</span><br><span> ########################################################################</span><br><span> find_package(SWIG)</span><br><span style="color: hsl(0, 100%, 40%);">-find_package(PythonLibs 2)</span><br><span style="color: hsl(120, 100%, 40%);">+find_package(PythonLibs)</span><br><span> if(NOT SWIG_FOUND OR NOT PYTHONLIBS_FOUND)</span><br><span>     return()</span><br><span> endif()</span><br><span> include(GrSwig)</span><br><span> include(GrPython)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")</span><br><span style="color: hsl(0, 100%, 40%);">-  # Mac OS X specific code</span><br><span style="color: hsl(0, 100%, 40%);">-  # Without this flag it does not find some of the libraries</span><br><span style="color: hsl(0, 100%, 40%);">-  SET(CMAKE_MODULE_LINKER_FLAGS "-undefined dynamic_lookup")</span><br><span style="color: hsl(0, 100%, 40%);">-ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> ########################################################################</span><br><span> # Setup swig generation</span><br><span> ########################################################################</span><br><span style="color: hsl(0, 100%, 40%);">-foreach(incdir ${GNURADIO_RUNTIME_INCLUDE_DIRS})</span><br><span style="color: hsl(0, 100%, 40%);">-    list(APPEND GR_SWIG_INCLUDE_DIRS ${incdir}/gnuradio/swig)</span><br><span style="color: hsl(0, 100%, 40%);">-endforeach(incdir)</span><br><span style="color: hsl(0, 100%, 40%);">-list(APPEND GR_SWIG_INCLUDE_DIRS ${FFTW3F_INCLUDE_DIRS})</span><br><span style="color: hsl(120, 100%, 40%);">+set(GR_SWIG_INCLUDE_DIRS $<TARGET_PROPERTY:gnuradio::runtime_swig,INTERFACE_INCLUDE_DIRECTORIES>)</span><br><span style="color: hsl(120, 100%, 40%);">+set(GR_SWIG_TARGET_DEPS gnuradio::runtime_swig)</span><br><span> </span><br><span> set(GR_SWIG_LIBRARIES grgsm)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> set(GR_SWIG_DOC_FILE ${CMAKE_CURRENT_BINARY_DIR}/grgsm_swig_doc.i)</span><br><span> set(GR_SWIG_DOC_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../include)</span><br><span> </span><br><span>@@ -59,7 +61,6 @@</span><br><span> install(</span><br><span>     FILES</span><br><span>     grgsm_swig.i</span><br><span style="color: hsl(0, 100%, 40%);">-    constants.i</span><br><span>     ${CMAKE_CURRENT_BINARY_DIR}/grgsm_swig_doc.i</span><br><span>     DESTINATION ${GR_INCLUDE_DIR}/grgsm/swig</span><br><span> )</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/gr-gsm/+/24060">change 24060</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/gr-gsm/+/24060"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: gr-gsm </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I23dd638c8c48ed0a4b50559ce33fbd5e60b7dcbc </div>
<div style="display:none"> Gerrit-Change-Number: 24060 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: ptrkrysik <ptrkrysik@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: ptrkrysik <ptrkrysik@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: vvvelichkov <vvvelichkov@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>