From c20d8ecef79ecad19ede9a3e45b36d3e62c2655a Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sat, 12 Jun 2021 12:37:39 +0200 Subject: [PATCH 1/5] 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: From 22b26be03f3df69fc1ced62de90e89bcd1807fe3 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sat, 12 Jun 2021 14:12:25 +0200 Subject: [PATCH 2/5] Fix local building of Matio for old hdf5 versions --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d2537dea..7033687f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2105,7 +2105,7 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS message(FATAL_ERROR "*** The hdf5 library is required to build Matio from source.") endif() - if(CMAKE_VERSION VERSION_LESS 3.7) + if(CMAKE_VERSION VERSION_LESS 3.7 OR "${HDF5_VERSION}" VERSION_LESS "1.8.13") if(ZLIB_FOUND) get_filename_component(ZLIB_BASE_DIR ${ZLIB_INCLUDE_DIRS} DIRECTORY) if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") From c97caf1227b76845cddb739d4511de2254b814ec Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sun, 13 Jun 2021 11:05:13 +0200 Subject: [PATCH 3/5] Fix for OpenSUSE and Fedora (static hdf5 library is shipped in another package) --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7033687f1..a04b6b5ca 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2217,6 +2217,7 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS -DMATIO_DEFAULT_FILE_VERSION:STRING=7.3 -DMATIO_MAT73=ON -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/matio + -DHDF5_USE_STATIC_LIBRARIES=OFF BUILD_COMMAND ${CMAKE_COMMAND} "--build" "${CMAKE_BINARY_DIR}/matio" "--config" $<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> From 40b39c2468a2c5f7d1d6e9116ae0f9a123f6889e Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Sun, 13 Jun 2021 21:05:20 +0200 Subject: [PATCH 4/5] Fix local building of Matio for OpenSUSE --- CMakeLists.txt | 167 +++++++++++++++++++++++++++---------------------- 1 file changed, 91 insertions(+), 76 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a04b6b5ca..114c20a8c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2061,6 +2061,7 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS 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 ZLIB library https://github.com/madler/zlib find_package(ZLIB) set_package_properties(ZLIB PROPERTIES URL "https://www.zlib.net/" @@ -2076,6 +2077,11 @@ 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(NOT ZLIB_FOUND) + message(FATAL_ERROR "*** The zlib library is required to build Matio from source.") + endif() + + # Find HDF5 library find_package(HDF5) set_package_properties(HDF5 PROPERTIES URL "https://support.hdfgroup.org/HDF5/" @@ -2100,86 +2106,87 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS message(STATUS " $ brew install hdf5") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "Linux|kFreeBSD|GNU") - message(STATUS " $ sudo apt-get install libhdf5-dev") + if(${LINUX_DISTRIBUTION} MATCHES "Fedora" OR ${LINUX_DISTRIBUTION} MATCHES "Red Hat" OR ${LINUX_DISTRIBUTION} MATCHES "CentOS") + message(STATUS " sudo yum install hdf5-devel") + elseif(${LINUX_DISTRIBUTION} MATCHES "openSUSE") + message(STATUS " sudo zypper install hdf5-devel") + else() + message(STATUS " sudo apt-get install libhdf5-dev") + endif() endif() message(FATAL_ERROR "*** The hdf5 library is required to build Matio from source.") endif() if(CMAKE_VERSION VERSION_LESS 3.7 OR "${HDF5_VERSION}" VERSION_LESS "1.8.13") - 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.") + 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(" 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") + 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() - 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() + 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() - else() - 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) - get_filename_component(HDF5_BASE_DIR2 ${HDF5_FIRST_DIR} DIRECTORY) - get_filename_component(HDF5_BASE_DIR ${HDF5_BASE_DIR2} DIRECTORY) - if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - if(EXISTS /opt/local/include/hdf5.h) - set(HDF5_BASE_DIR /opt/local) - endif() - if(EXISTS /usr/local/include/hdf5.h) - set(HDF5_BASE_DIR /usr/local) - endif() + + list(GET HDF5_LIBRARIES 0 HDF5_FIRST_DIR) + get_filename_component(HDF5_BASE_DIR2 ${HDF5_FIRST_DIR} DIRECTORY) + get_filename_component(HDF5_BASE_DIR ${HDF5_BASE_DIR2} DIRECTORY) + if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + if(EXISTS /opt/local/include/hdf5.h) + set(HDF5_BASE_DIR /opt/local) + endif() + if(EXISTS /usr/local/include/hdf5.h) + set(HDF5_BASE_DIR /usr/local) endif() endif() set(MATIO_MAKE_PROGRAM ${CMAKE_MAKE_PROGRAM}) @@ -2194,7 +2201,7 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS endif() set(MATIO_MAKE_PROGRAM ${MATIO_MAKE_EXECUTABLE}) endif() - + set(MATIO_STATIC_LIB ${CMAKE_BINARY_DIR}/matio/lib/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}) ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} PREFIX ${CMAKE_BINARY_DIR}/matio GIT_REPOSITORY https://github.com/tbeu/matio @@ -2204,7 +2211,14 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS 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() + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/matio/lib) + else() # CMake >= 3.7 + include(GNUInstallDirs) + set(MATIO_STATIC_LIB ${CMAKE_BINARY_DIR}/matio/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}) + if(${LINUX_DISTRIBUTION} MATCHES "openSUSE") + # weird workaround for OpenSUSE + set(EXTRA_MATIO_BUILD_FLAGS -DMATIO_WITH_ZLIB=OFF -DHAVE_ZLIB=1) + endif() ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} PREFIX ${CMAKE_BINARY_DIR}/matio GIT_REPOSITORY https://github.com/tbeu/matio @@ -2214,27 +2228,28 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS CMAKE_ARGS -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DMATIO_SHARED=OFF + "${EXTRA_MATIO_BUILD_FLAGS}" + -DHDF5_USE_STATIC_LIBRARIES=OFF -DMATIO_DEFAULT_FILE_VERSION:STRING=7.3 -DMATIO_MAT73=ON -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/matio - -DHDF5_USE_STATIC_LIBRARIES=OFF 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} + BUILD_BYPRODUCTS ${MATIO_STATIC_LIB} ) + file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/matio/${CMAKE_INSTALL_LIBDIR}) 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}" + IMPORTED_LOCATION ${MATIO_STATIC_LIB} 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}" + INTERFACE_LINK_LIBRARIES "${MATIO_STATIC_LIB};${HDF5_LIBRARIES};${ZLIB_LIBRARIES}" ) endif() endif() From 6d40c9e5a9c1c339398ee24ca9032fef39950232 Mon Sep 17 00:00:00 2001 From: Carles Fernandez Date: Mon, 14 Jun 2021 11:37:12 +0200 Subject: [PATCH 5/5] Fix local building of Matio for a range of HDF5 versions --- CMakeLists.txt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 114c20a8c..b9180cb54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2215,8 +2215,8 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS else() # CMake >= 3.7 include(GNUInstallDirs) set(MATIO_STATIC_LIB ${CMAKE_BINARY_DIR}/matio/${CMAKE_INSTALL_LIBDIR}/${CMAKE_FIND_LIBRARY_PREFIXES}matio${CMAKE_STATIC_LIBRARY_SUFFIX}) - if(${LINUX_DISTRIBUTION} MATCHES "openSUSE") - # weird workaround for OpenSUSE + if("${HDF5_VERSION}" VERSION_GREATER "1.8.18" AND "${HDF5_VERSION}" VERSION_LESS "1.10.4") + # weird workaround, but it works in all tested distros (Ubuntu, Debian, Fedora, CentOS, OpenSUSE) set(EXTRA_MATIO_BUILD_FLAGS -DMATIO_WITH_ZLIB=OFF -DHAVE_ZLIB=1) endif() ExternalProject_Add(matio-${GNSSSDR_MATIO_LOCAL_VERSION} @@ -2226,6 +2226,7 @@ if(NOT MATIO_FOUND OR MATIO_VERSION_STRING VERSION_LESS ${GNSSSDR_MATIO_MIN_VERS 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_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_BUILD_TYPE=$<$:Debug>$<$:Release>$<$:RelWithDebInfo>$<$:MinSizeRel>$<$:Debug>$<$:Debug>$<$:RelWithDebInfo>$<$:RelWithDebInfo>$<$:Debug> -DMATIO_SHARED=OFF "${EXTRA_MATIO_BUILD_FLAGS}"