From c20d8ecef79ecad19ede9a3e45b36d3e62c2655a Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sat, 12 Jun 2021 12:37:39 +0200 Subject: [PATCH] If the Matio library is not found, now it is configured and built by CMake instead of using autotools --- CMakeLists.txt | 275 ++++++++++++++++++++++++---------------------- docs/CHANGELOG.md | 2 + 2 files changed, 144 insertions(+), 133 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4427fcfd8..8d2537dea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2058,6 +2058,9 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS endif() message(STATUS " Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded, built, and statically linked automatically") message(STATUS " when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'.") + set_package_properties(MATIO PROPERTIES + PURPOSE "Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." + ) find_package(ZLIB) set_package_properties(ZLIB PROPERTIES URL "https://www.zlib.net/" @@ -2073,79 +2076,98 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS DESCRIPTION "A Massively Spiffy Yet Delicately Unobtrusive Compression Library" ) endif() - if(ZLIB_FOUND) - get_filename_component(ZLIB_BASE_DIR ${ZLIB_INCLUDE_DIRS} DIRECTORY) - if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") - if(NOT EXISTS "/usr/bin/libtoolize") - message(" libtool has not been found.") - message(" You can try to install it by typing:") - if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") - message(" sudo yum groupinstall 'Development Tools'") - elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") - message(" sudo zypper install libtoool") - else() - message(" sudo apt-get install libtool") - endif() - message(FATAL_ERROR "libtool is required to build matio from source") - endif() - if(EXISTS "/usr/bin/aclocal" OR - EXISTS "/usr/bin/aclocal-1.16" OR - EXISTS "/usr/bin/aclocal-1.15" OR - EXISTS "/usr/bin/aclocal-1.14" OR - EXISTS "/usr/bin/aclocal-1.13" OR - EXISTS "/usr/bin/aclocal-1.11" OR - EXISTS "/usr/bin/aclocal-1.10") - message(STATUS "Automake found.") - else() - message(" aclocal has not been found.") - message(" You can try to install it by typing:") - if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") - message(" sudo yum groupinstall 'Development Tools'") - elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") - message(" sudo zypper install automake") - else() - message(" sudo apt-get install automake") - endif() - message(FATAL_ERROR "aclocal is required to build matio from source") - endif() - endif() + find_package(HDF5) + set_package_properties(HDF5 PROPERTIES + URL "https://support.hdfgroup.org/HDF5/" + PURPOSE "Required to build Matio." + TYPE REQUIRED + ) + if(HDF5_FOUND AND HDF5_VERSION) + set_package_properties(HDF5 PROPERTIES + DESCRIPTION "A versatile data model, a portable file format and a software library (found: v${HDF5_VERSION})" + ) + else() + set_package_properties(HDF5 PROPERTIES + DESCRIPTION "A versatile data model, a portable file format and a software library" + ) + endif() + if(NOT HDF5_FOUND) + message(STATUS " The hdf5 library has not been found in your system.") + message(STATUS " Please try to install it by doing:") if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - if((NOT EXISTS /usr/local/bin/glibtoolize AND NOT EXISTS /opt/local/bin/glibtoolize) OR - (NOT EXISTS /usr/local/bin/aclocal AND NOT EXISTS /opt/local/bin/aclocal)) - message(" libtool/automake tools have not been found.") - message(" You can try to install them by typing:") - message(" 'sudo port install libtool automake', if you use Macports, or 'brew install libtool automake', if you use Homebrew") - message(FATAL_ERROR "libtool/automake tools are required to build matio from source") - endif() - if(CMAKE_GENERATOR STREQUAL Xcode) - if(EXISTS /opt/local/bin/glibtoolize OR EXISTS /opt/local/bin/aclocal) - if(NOT EXISTS /usr/local/bin/glibtoolize OR NOT EXISTS /usr/local/bin/aclocal) - message(" WARNING: libtool/atomake binaries cannot be found by Xcode. Please do:") - message("sudo ln -s /opt/local/bin/glibtoolize /usr/local/bin/") - message("sudo ln -s /opt/local/bin/aclocal /usr/local/bin/") - message("sudo ln -s /opt/local/bin/autom4te /usr/local/bin/") - message("sudo ln -s /opt/local/bin/automake /usr/local/bin/") - message("sudo ln -s /opt/local/bin/autoconf /usr/local/bin/") - message("sudo ln -s /opt/local/bin/autoreconf /usr/local/bin/") # not needed by Matio, but by Protocol Buffers - message(FATAL_ERROR "libtool/automake tools cannot be found by Xcode") + message(STATUS " $ sudo port install hdf5") + message(STATUS " or") + message(STATUS " $ brew install hdf5") + endif() + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") + message(STATUS " $ sudo apt-get install libhdf5-dev") + endif() + message(FATAL_ERROR "*** The hdf5 library is required to build Matio from source.") + endif() + + if(CMAKE_VERSION VERSION_LESS 3.7) + if(ZLIB_FOUND) + get_filename_component(ZLIB_BASE_DIR ${ZLIB_INCLUDE_DIRS} DIRECTORY) + if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") + if(NOT EXISTS "/usr/bin/libtoolize") + message(" libtool has not been found.") + message(" You can try to install it by typing:") + if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") + message(" sudo yum groupinstall 'Development Tools'") + elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") + message(" sudo zypper install libtoool") + else() + message(" sudo apt-get install libtool") + endif() + message(FATAL_ERROR "libtool is required to build matio from source") + endif() + if(EXISTS "/usr/bin/aclocal" OR + EXISTS "/usr/bin/aclocal-1.16" OR + EXISTS "/usr/bin/aclocal-1.15" OR + EXISTS "/usr/bin/aclocal-1.14" OR + EXISTS "/usr/bin/aclocal-1.13" OR + EXISTS "/usr/bin/aclocal-1.11" OR + EXISTS "/usr/bin/aclocal-1.10") + message(STATUS "Automake found.") + else() + message(" aclocal has not been found.") + message(" You can try to install it by typing:") + if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat") + message(" sudo yum groupinstall 'Development Tools'") + elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") + message(" sudo zypper install automake") + else() + message(" sudo apt-get install automake") + endif() + message(FATAL_ERROR "aclocal is required to build matio from source") + endif() + + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + if((NOT EXISTS /usr/local/bin/glibtoolize AND NOT EXISTS /opt/local/bin/glibtoolize) OR + (NOT EXISTS /usr/local/bin/aclocal AND NOT EXISTS /opt/local/bin/aclocal)) + message(" libtool/automake tools have not been found.") + message(" You can try to install them by typing:") + message(" 'sudo port install libtool automake', if you use Macports, or 'brew install libtool automake', if you use Homebrew") + message(FATAL_ERROR "libtool/automake tools are required to build matio from source") + endif() + if(CMAKE_GENERATOR STREQUAL Xcode) + if(EXISTS /opt/local/bin/glibtoolize OR EXISTS /opt/local/bin/aclocal) + if(NOT EXISTS /usr/local/bin/glibtoolize OR NOT EXISTS /usr/local/bin/aclocal) + message(" WARNING: libtool/atomake binaries cannot be found by Xcode. Please do:") + message("sudo ln -s /opt/local/bin/glibtoolize /usr/local/bin/") + message("sudo ln -s /opt/local/bin/aclocal /usr/local/bin/") + message("sudo ln -s /opt/local/bin/autom4te /usr/local/bin/") + message("sudo ln -s /opt/local/bin/automake /usr/local/bin/") + message("sudo ln -s /opt/local/bin/autoconf /usr/local/bin/") + message("sudo ln -s /opt/local/bin/autoreconf /usr/local/bin/") # not needed by Matio, but by Protocol Buffers + message(FATAL_ERROR "libtool/automake tools cannot be found by Xcode") + endif() + endif() endif() endif() endif() - endif() - find_package(HDF5) - set_package_properties(HDF5 PROPERTIES - URL "https://support.hdfgroup.org/HDF5/" - PURPOSE "Required to build Matio." - TYPE REQUIRED - ) - if(HDF5_FOUND AND HDF5_VERSION) - set_package_properties(HDF5 PROPERTIES - DESCRIPTION "A versatile data model, a portable file format and a software library (found: v${HDF5_VERSION})" - ) else() - set_package_properties(HDF5 PROPERTIES - DESCRIPTION "A versatile data model, a portable file format and a software library" - ) + message(FATAL_ERROR "*** The zlib library is required to build Matio from source.") endif() if(HDF5_FOUND) list(GET HDF5_LIBRARIES 0 HDF5_FIRST_DIR) @@ -2159,74 +2181,61 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS set(HDF5_BASE_DIR /usr/local) endif() endif() - - set(MATIO_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) - if(MATIO_MAKE_PROGRAM MATCHES "ninja" OR CMAKE_GENERATOR STREQUAL Xcode) - find_program(MATIO_MAKE_EXECUTABLE make - PATHS - /usr/bin - /usr/local/bin - ) - if(NOT MATIO_MAKE_EXECUTABLE) - message(FATAL_ERROR "make is required to build Matio from source.") - endif() - set(MATIO_MAKE_PROGRAM ${MATIO_MAKE_EXECUTABLE}) - endif() - - if(CMAKE_VERSION VERSION_LESS 3.2) - ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} - PREFIX ${CMAKE_BINARY_DIR}/matio - GIT_REPOSITORY https://github.com/tbeu/matio - GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION} - SOURCE_DIR ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION} - UPDATE_COMMAND ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/autogen.sh - CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/configure --with-hdf5=${HDF5_BASE_DIR} --with-zlib=${ZLIB_BASE_DIR} --with-default-file-ver=7.3 --enable-mat73=yes --prefix= - BUILD_COMMAND ${MATIO_MAKE_PROGRAM} - ) - else() - ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} - PREFIX ${CMAKE_BINARY_DIR}/matio - GIT_REPOSITORY https://github.com/tbeu/matio - GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION} - SOURCE_DIR ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION} - UPDATE_COMMAND ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/autogen.sh - CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/configure --with-hdf5=${HDF5_BASE_DIR} --with-zlib=${ZLIB_BASE_DIR} --with-default-file-ver=7.3 --enable-mat73=yes --prefix= - BUILD_COMMAND ${MATIO_MAKE_PROGRAM} - BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX} - ) - endif() - set(MATIO_LOCAL TRUE) - if(NOT TARGET Matio::matio) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/matio/include) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/matio/lib) - add_library(Matio::matio STATIC IMPORTED) - add_dependencies(Matio::matio matio-${GNSSSDR_MATIO_LOCAL_VERSION}) - set_target_properties(Matio::matio PROPERTIES - IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" - IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}" - INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/matio/include - INTERFACE_LINK_LIBRARIES "${CMAKE_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX};${HDF5_LIBRARIES};${ZLIB_LIBRARIES}" - ) - endif() - else() - message(STATUS " The hdf5 library has not been found in your system.") - message(STATUS " Please try to install it by doing:") - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - message(STATUS " $ sudo port install hdf5") - message(STATUS " or") - message(STATUS " $ brew install hdf5") - endif() - if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") - message(STATUS " $ sudo apt-get install libhdf5-dev") - endif() - message(FATAL_ERROR "*** The hdf5 library is required to build gnss-sdr") endif() + set(MATIO_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) + if(MATIO_MAKE_PROGRAM MATCHES "ninja" OR CMAKE_GENERATOR STREQUAL Xcode) + find_program(MATIO_MAKE_EXECUTABLE make + PATHS + /usr/bin + /usr/local/bin + ) + if(NOT MATIO_MAKE_EXECUTABLE) + message(FATAL_ERROR "make is required to build Matio from source.") + endif() + set(MATIO_MAKE_PROGRAM ${MATIO_MAKE_EXECUTABLE}) + endif() + + ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} + PREFIX ${CMAKE_BINARY_DIR}/matio + GIT_REPOSITORY https://github.com/tbeu/matio + GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION} + SOURCE_DIR ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION} + UPDATE_COMMAND ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/autogen.sh + CONFIGURE_COMMAND ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION}/configure --with-hdf5=${HDF5_BASE_DIR} --with-zlib=${ZLIB_BASE_DIR} --with-default-file-ver=7.3 --enable-mat73=yes --prefix= + BUILD_COMMAND ${MATIO_MAKE_PROGRAM} + ) else() - message(FATAL_ERROR "*** The zlib library is required to build gnss-sdr") + ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} + PREFIX ${CMAKE_BINARY_DIR}/matio + GIT_REPOSITORY https://github.com/tbeu/matio + GIT_TAG v${GNSSSDR_MATIO_LOCAL_VERSION} + SOURCE_DIR ${CMAKE_BINARY_DIR}/thirdparty/matio/matio-${GNSSSDR_MATIO_LOCAL_VERSION} + BINARY_DIR ${CMAKE_BINARY_DIR}/matio + CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} + -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + -DMATIO_SHARED=OFF + -DMATIO_DEFAULT_FILE_VERSION:STRING=7.3 + -DMATIO_MAT73=ON + -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/matio + BUILD_COMMAND ${CMAKE_COMMAND} + "--build" "${CMAKE_BINARY_DIR}/matio" + "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> + BUILD_BYPRODUCTS ${CMAKE_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX} + ) + endif() + set(MATIO_LOCAL TRUE) + if(NOT TARGET Matio::matio) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/matio/include) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/matio/lib) + add_library(Matio::matio STATIC IMPORTED) + add_dependencies(Matio::matio matio-${GNSSSDR_MATIO_LOCAL_VERSION}) + set_target_properties(Matio::matio PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "CXX" + IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}" + INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/matio/include + INTERFACE_LINK_LIBRARIES "${CMAKE_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX};${HDF5_LIBRARIES};${ZLIB_LIBRARIES}" + ) endif() - set_package_properties(MATIO PROPERTIES - PURPOSE "Matio v${GNSSSDR_MATIO_LOCAL_VERSION} will be downloaded, built, and statically linked when doing '${CMAKE_MAKE_PROGRAM_PRETTY_NAME}'." - ) endif() diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 7814ef1a8..4e1c689f9 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -65,6 +65,8 @@ All notable changes to GNSS-SDR will be documented in this file. Boost >= 1.74. - Fix linking of the `` library when using GCC 8.x and GNU Radio >= 3.8. +- If the Matio library is not found, now it is configured and built by CMake + instead of using autotools. ### Improvements in Usability: