From b8ef3cd7ee3284b2f399101d0c0d7e94af191aaf Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Mon, 7 Jan 2019 12:48:38 -0500 Subject: [PATCH 1/8] Remove executable bit from non-executable text files --- .gitignore | 0 CMakeLists.txt | 0 Copyright.txt | 0 LICENSE | 0 README | 0 data/data_600x400_orig | Bin data/u3_513x513_orig | Bin data/zort_111_160_15.dat | Bin include/mgard.h | 0 include/mgard_capi.h | 0 include/mgard_nuni.h | 0 makefile | 0 src/mgard.cpp | 0 src/mgard_capi.cpp | 0 src/mgard_nuni.cpp | 0 src/mgard_sirius_test.c | 0 src/mgard_test.c | 0 17 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 .gitignore mode change 100755 => 100644 CMakeLists.txt mode change 100755 => 100644 Copyright.txt mode change 100755 => 100644 LICENSE mode change 100755 => 100644 README mode change 100755 => 100644 data/data_600x400_orig mode change 100755 => 100644 data/u3_513x513_orig mode change 100755 => 100644 data/zort_111_160_15.dat mode change 100755 => 100644 include/mgard.h mode change 100755 => 100644 include/mgard_capi.h mode change 100755 => 100644 include/mgard_nuni.h mode change 100755 => 100644 makefile mode change 100755 => 100644 src/mgard.cpp mode change 100755 => 100644 src/mgard_capi.cpp mode change 100755 => 100644 src/mgard_nuni.cpp mode change 100755 => 100644 src/mgard_sirius_test.c mode change 100755 => 100644 src/mgard_test.c diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/Copyright.txt b/Copyright.txt old mode 100755 new mode 100644 diff --git a/LICENSE b/LICENSE old mode 100755 new mode 100644 diff --git a/README b/README old mode 100755 new mode 100644 diff --git a/data/data_600x400_orig b/data/data_600x400_orig old mode 100755 new mode 100644 diff --git a/data/u3_513x513_orig b/data/u3_513x513_orig old mode 100755 new mode 100644 diff --git a/data/zort_111_160_15.dat b/data/zort_111_160_15.dat old mode 100755 new mode 100644 diff --git a/include/mgard.h b/include/mgard.h old mode 100755 new mode 100644 diff --git a/include/mgard_capi.h b/include/mgard_capi.h old mode 100755 new mode 100644 diff --git a/include/mgard_nuni.h b/include/mgard_nuni.h old mode 100755 new mode 100644 diff --git a/makefile b/makefile old mode 100755 new mode 100644 diff --git a/src/mgard.cpp b/src/mgard.cpp old mode 100755 new mode 100644 diff --git a/src/mgard_capi.cpp b/src/mgard_capi.cpp old mode 100755 new mode 100644 diff --git a/src/mgard_nuni.cpp b/src/mgard_nuni.cpp old mode 100755 new mode 100644 diff --git a/src/mgard_sirius_test.c b/src/mgard_sirius_test.c old mode 100755 new mode 100644 diff --git a/src/mgard_test.c b/src/mgard_test.c old mode 100755 new mode 100644 From 91ff24c2cbeffdaefb4b37ad315e9cb2daa1e588 Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Mon, 7 Jan 2019 13:10:32 -0500 Subject: [PATCH 2/8] CMake: Use target_compile_features for C++11 support --- CMakeLists.txt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8542a177c1..37048b0a92 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,3 @@ - cmake_minimum_required(VERSION 3.6) if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) @@ -8,9 +7,6 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) endif() project(MGARD VERSION 0.1) -set(CMAKE_CXX_STANDARD 11) -set(CMAKE_CXX_STANDARD_REQUIRED True) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Default to a Release build if not specified if(NOT CMAKE_BUILD_TYPE) @@ -44,9 +40,16 @@ target_include_directories(mgard $ $ ) - target_link_libraries(mgard PRIVATE ZLIB::ZLIB) +# Make sure we require C++11. Use meta-compile features if available, +# otherwise use specific language features +if(NOT (CMAKE_VERSION VERSION_LESS 3.9)) + target_compile_features(mgard PUBLIC cxx_std_11) +else() + target_compile_features(mgard PUBLIC cxx_auto_type cxx_nullptr) +endif() + install( TARGETS mgard EXPORT mgard RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} From db7d38a39ddf280d7b038adeb94d7a03cb13f2c2 Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Mon, 7 Jan 2019 13:15:00 -0500 Subject: [PATCH 3/8] CMake: Allow tests to optionally be built --- CMakeLists.txt | 65 +++++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 37048b0a92..fa25feaaff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,38 +64,43 @@ install( DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} ) -message("-- Installation prefix: ${CMAKE_INSTALL_PREFIX}") -message(" bin: ${CMAKE_INSTALL_BINDIR}") -message(" lib: ${CMAKE_INSTALL_LIBDIR}") -message(" include: ${CMAKE_INSTALL_INCLUDEDIR}") -message("-- Build Type: ${CMAKE_BUILD_TYPE}") - # Create executables under build/bin -enable_testing() - -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +include(CTest) +if(BUILD_TESTING) + enable_testing() + add_executable(mgard_test ${CMAKE_CURRENT_SOURCE_DIR}/src/mgard_test.c) + target_link_libraries(mgard_test mgard) -add_executable(mgard_test ${CMAKE_CURRENT_SOURCE_DIR}/src/mgard_test.c) -target_link_libraries(mgard_test mgard) - -add_test(NAME mgard_test1 - COMMAND $ - ${CMAKE_CURRENT_SOURCE_DIR}/data/u3_513x513_orig - ${CMAKE_CURRENT_SOURCE_DIR}/data/u3_513x513.mgard - 513 513 1 1e-2 -) + add_test(NAME mgard_test1 + COMMAND mgard_test + ${CMAKE_CURRENT_SOURCE_DIR}/data/u3_513x513_orig + ${CMAKE_CURRENT_SOURCE_DIR}/data/u3_513x513.mgard + 513 513 1 1e-2 + ) -add_test(NAME mgard_test2 - COMMAND $ - ${CMAKE_CURRENT_SOURCE_DIR}/data/data_600x400_orig - ${CMAKE_CURRENT_SOURCE_DIR}/data/data_600x400.mgard - 600 400 1 1e-2 -) + add_test(NAME mgard_test2 + COMMAND mgard_test + ${CMAKE_CURRENT_SOURCE_DIR}/data/data_600x400_orig + ${CMAKE_CURRENT_SOURCE_DIR}/data/data_600x400.mgard + 600 400 1 1e-2 + ) + + add_test(NAME mgard_test3 + COMMAND mgard_test + ${CMAKE_CURRENT_SOURCE_DIR}/data/zort_111_160_15.dat + ${CMAKE_CURRENT_SOURCE_DIR}/data/zort_111_160_15.mgard + 11 160 15 1e-3 + ) +endif() +message("-- Configuration summary:") +message("") +message(" Installation prefix: ${CMAKE_INSTALL_PREFIX}") +message(" bin: ${CMAKE_INSTALL_BINDIR}") +message(" lib: ${CMAKE_INSTALL_LIBDIR}") +message(" include: ${CMAKE_INSTALL_INCLUDEDIR}") +message("") +message(" Build Type: ${CMAKE_BUILD_TYPE}") +message(" Shared Lib: ${BUILD_SHARED_LIBS}") +message(" Testing: ${BUILD_TESTING}") -add_test(NAME mgard_test3 - COMMAND $ - ${CMAKE_CURRENT_SOURCE_DIR}/data/zort_111_160_15.dat - ${CMAKE_CURRENT_SOURCE_DIR}/data/zort_111_160_15.mgard - 11 160 15 1e-3 -) From 5336af636e3621f21f1e604ac743c0eb5d167942 Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Mon, 7 Jan 2019 13:17:13 -0500 Subject: [PATCH 4/8] CMake: Consolidate output and build type options to the top of the file --- CMakeLists.txt | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fa25feaaff..09994d88c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,8 +8,42 @@ endif() project(MGARD VERSION 0.1) -# Default to a Release build if not specified -if(NOT CMAKE_BUILD_TYPE) +# Some boilerplate to setup nice output directories +set(CMAKE_INSTALL_BINDIR bin CACHE STRING "Installation runtime subdirectory") +set(CMAKE_INSTALL_LIBDIR lib CACHE STRING "Installation library subdirectory") +set(CMAKE_INSTALL_INCLUDEDIR include + CACHE STRING "Installation include subdirectory") +if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) + set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY + ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) +endif() +if(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY) + set(CMAKE_LIBRARY_OUTPUT_DIRECTORY + ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) +endif() +if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY) + set(CMAKE_RUNTIME_OUTPUT_DIRECTORY + ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}) +endif() + +# Setup shared library defaults. If explicitly specified somehow, then default +# to that. Otherwise base the default on whether or not shared libs are even +# supported (oddities of the CrayPE). +include(CMakeDependentOption) +get_property(SHARED_LIBS_SUPPORTED GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) +cmake_dependent_option(BUILD_SHARED_LIBS + "Build shared libraries (so/dylib/dll)." ${SHARED_LIBS_SUPPORTED} + "SHARED_LIBS_SUPPORTED" OFF +) +mark_as_advanced(BUILD_SHARED_LIBS) + +# Always build with PIC support if available +if(SHARED_LIBS_SUPPORTED) + set(CMAKE_POSITION_INDEPENDENT_CODE ON) +endif() + +# Default to a release build if not specified +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build." FORCE) endif() From 7df1dd308cbbf593f1e97c8780d9190439989e36 Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Mon, 7 Jan 2019 13:18:54 -0500 Subject: [PATCH 5/8] CMake: Add include files to the target for IDE generators --- CMakeLists.txt | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 09994d88c5..5de797245a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,27 +51,14 @@ endif() find_package(ZLIB REQUIRED) # Set library -set(SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/mgard.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/mgard_capi.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/src/mgard_nuni.cpp - ) - -add_library(mgard ${SOURCE_FILES}) -#target_include_directories(mgard -# PUBLIC -# $ -#) -set(CMAKE_INSTALL_BINDIR bin CACHE STRING "Installation runtime subdirectory") -set(CMAKE_INSTALL_LIBDIR lib CACHE STRING "Installation library subdirectory") -set(CMAKE_INSTALL_INCLUDEDIR include - CACHE STRING "Installation include subdirectory") -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY - ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) - +add_library(mgard + src/mgard.cpp include/mgard.h + src/mgard_capi.cpp include/mgard_capi.h + src/mgard_nuni.cpp include/mgard_nuni.h +) target_include_directories(mgard PUBLIC $ - $ $ ) target_link_libraries(mgard PRIVATE ZLIB::ZLIB) From 91ffb42a9dbc2924f2256f468eda67f4c99728c8 Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Mon, 7 Jan 2019 13:34:49 -0500 Subject: [PATCH 6/8] CMake: Setup library versioning from the header file --- CMakeLists.txt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5de797245a..a4da2dacf6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,13 @@ if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) "separate from the source directory") endif() -project(MGARD VERSION 0.1) +# Extract the version string from the header file and setup the project version +# accordingly +file(STRINGS ${CMAKE_CURRENT_LIST_DIR}/include/mgard.h MGARD_VERSION + REGEX "// version: " + LIMIT_COUNT 1) +string(REGEX MATCH "[0-9]+(\.[0-9])+" MGARD_VERSION "${MGARD_VERSION}") +project(MGARD VERSION ${MGARD_VERSION}) # Some boilerplate to setup nice output directories set(CMAKE_INSTALL_BINDIR bin CACHE STRING "Installation runtime subdirectory") @@ -71,6 +77,12 @@ else() target_compile_features(mgard PUBLIC cxx_auto_type cxx_nullptr) endif() +# Set library version information +set_target_properties(mgard PROPERTIES + VERSION ${MGARD_VERSION} + SOVERSION ${MGARD_VERSION_MAJOR} +) + install( TARGETS mgard EXPORT mgard RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} From c213c7c4694f88bb03e71b99e117abea6e6bc439 Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Fri, 11 Jan 2019 13:45:06 -0500 Subject: [PATCH 7/8] CMake: export CMake package config files --- CMakeLists.txt | 39 ++++++++++++++++++++++++++++++++++++++- mgard-config.cmake.in | 25 +++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 mgard-config.cmake.in diff --git a/CMakeLists.txt b/CMakeLists.txt index a4da2dacf6..382b434be2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,14 @@ set(CMAKE_INSTALL_BINDIR bin CACHE STRING "Installation runtime subdirectory") set(CMAKE_INSTALL_LIBDIR lib CACHE STRING "Installation library subdirectory") set(CMAKE_INSTALL_INCLUDEDIR include CACHE STRING "Installation include subdirectory") +if(WIN32 AND NOT CYGWIN) + set(CMAKE_INSTALL_CMAKEDIR CMake + CACHE STRING "Installation CMake subdirectory") +else() + set(CMAKE_INSTALL_CMAKEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/mgard + CACHE STRING "Installation CMake subdirectory") +endif() + if(NOT CMAKE_ARCHIVE_OUTPUT_DIRECTORY) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}) @@ -84,7 +92,7 @@ set_target_properties(mgard PROPERTIES ) install( - TARGETS mgard EXPORT mgard + TARGETS mgard EXPORT mgard-targets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} @@ -126,12 +134,41 @@ if(BUILD_TESTING) ) endif() +# Add all targets to the build-tree export set +export(TARGETS mgard NAMESPACE mgard:: + FILE "${PROJECT_BINARY_DIR}/mgard-targets.cmake" +) + +# Create the mgard-config.cmake and mgard-config-version files +include(CMakePackageConfigHelpers) +write_basic_package_version_file( + "${PROJECT_BINARY_DIR}/mgard-config-version.cmake" + COMPATIBILITY SameMajorVersion +) +configure_file(mgard-config.cmake.in + "${PROJECT_BINARY_DIR}/mgard-config.cmake" @ONLY +) + +# Install the mgard-config.cmake and mgard-config-version.cmake +install( + FILES + "${PROJECT_BINARY_DIR}/mgard-config.cmake" + "${PROJECT_BINARY_DIR}/mgard-config-version.cmake" + DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" COMPONENT dev +) + +# Install the export set for use with the install-tree +install(EXPORT mgard-targets NAMESPACE mgard:: + DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" COMPONENT dev +) + message("-- Configuration summary:") message("") message(" Installation prefix: ${CMAKE_INSTALL_PREFIX}") message(" bin: ${CMAKE_INSTALL_BINDIR}") message(" lib: ${CMAKE_INSTALL_LIBDIR}") message(" include: ${CMAKE_INSTALL_INCLUDEDIR}") +message(" cmake: ${CMAKE_INSTALL_CMAKEDIR}") message("") message(" Build Type: ${CMAKE_BUILD_TYPE}") message(" Shared Lib: ${BUILD_SHARED_LIBS}") diff --git a/mgard-config.cmake.in b/mgard-config.cmake.in new file mode 100644 index 0000000000..1428eeea25 --- /dev/null +++ b/mgard-config.cmake.in @@ -0,0 +1,25 @@ +include(CMakeFindDependencyMacro) + +set(_mgard_required_vars) +if(@BUILD_SHARED_LIBS@) + find_dependency(ZLIB) + list(APPEND _mgard_required_vars ZLIB_FOUND) +endif() + +if(_mgard_required_vars) + list(INSERT _mgard_required_vars 0 REQUIRED_VARS) +endif() + +include(FindPackageHandleStandardArgs) +set(${CMAKE_FIND_PACKAGE_NAME}_CONFIG ${CMAKE_CURRENT_LIST_FILE}) +find_package_handle_standard_args(${CMAKE_FIND_PACKAGE_NAME} CONFIG_MODE + ${_mgard_required_vars}) + +if(NOT TARGET mgard::mgard) + include("${CMAKE_CURRENT_LIST_DIR}/mgard-targets.cmake") +endif() + +set(MGARD_LIBRARIES mgard::mgard) +set(MGARD_INCLUDE_DIRS + $ +) From 4ce42afef2e0386b1a337f8ac9f09a2b1e41ade7 Mon Sep 17 00:00:00 2001 From: Chuck Atkins Date: Fri, 11 Jan 2019 13:53:39 -0500 Subject: [PATCH 8/8] CMake: Install pkg-config files for non-cmake projects --- CMakeLists.txt | 7 +++++++ mgard.pc.in | 11 +++++++++++ 2 files changed, 18 insertions(+) create mode 100644 mgard.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index 382b434be2..00557d77cb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -162,6 +162,13 @@ install(EXPORT mgard-targets NAMESPACE mgard:: DESTINATION "${CMAKE_INSTALL_CMAKEDIR}" COMPONENT dev ) +# Install pkg-config files for non-cmake projects +configure_file(mgard.pc.in "${PROJECT_BINARY_DIR}/mgard.pc" @ONLY) +install( + FILES "${PROJECT_BINARY_DIR}/mgard.pc" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig" COMPONENT dev +) + message("-- Configuration summary:") message("") message(" Installation prefix: ${CMAKE_INSTALL_PREFIX}") diff --git a/mgard.pc.in b/mgard.pc.in new file mode 100644 index 0000000000..8d2fd5b790 --- /dev/null +++ b/mgard.pc.in @@ -0,0 +1,11 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@ +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: MGARD +Description: MultiGrid Adaptive Reduction of Data +URL: https://github.com/CODARcode/MGARD +Version: @MGARD_VERSION@ +Requires.private: zlib +Cflags: -I${includedir} +Libs: -L${libdir} -l@MGARD_LIBRARY_PREFIX@mgard