1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
configure_file(
"${PROJECT_SOURCE_DIR}/cmake/matio_pubconf.cmake.in"
"${PROJECT_BINARY_DIR}/src/matio_pubconf.h"
ESCAPE_QUOTES @ONLY
)
configure_file(
"${PROJECT_SOURCE_DIR}/cmake/matioConfig.cmake.in"
"${PROJECT_BINARY_DIR}/src/matioConfig.h"
ESCAPE_QUOTES @ONLY
)
set(MATIO_SOURCES
${PROJECT_SOURCE_DIR}/src/endian.c
${PROJECT_SOURCE_DIR}/src/mat.c
${PROJECT_SOURCE_DIR}/src/io.c
${PROJECT_SOURCE_DIR}/src/inflate.c
${PROJECT_SOURCE_DIR}/src/mat73.c
${PROJECT_SOURCE_DIR}/src/matvar_cell.c
${PROJECT_SOURCE_DIR}/src/matvar_struct.c
${PROJECT_SOURCE_DIR}/src/mat4.c
${PROJECT_SOURCE_DIR}/src/mat5.c
${PROJECT_SOURCE_DIR}/src/read_data.c
${PROJECT_SOURCE_DIR}/snprintf/snprintf.c
${PROJECT_SOURCE_DIR}/src/mat5.h
${PROJECT_SOURCE_DIR}/src/mat73.h
${PROJECT_SOURCE_DIR}/src/matio_private.h
${PROJECT_SOURCE_DIR}/src/mat4.h
${PROJECT_SOURCE_DIR}/src/matio.h
${PROJECT_SOURCE_DIR}/visual_studio/matio.rc
${PROJECT_SOURCE_DIR}/visual_studio/matio.def
${PROJECT_SOURCE_DIR}/src/read_data_impl.h
${PROJECT_SOURCE_DIR}/src/safe-math.h
${PROJECT_BINARY_DIR}/src/matio_pubconf.h
${PROJECT_BINARY_DIR}/src/matioConfig.h
)
if(STDINT_MSVC)
set(MATIO_SOURCES ${MATIO_SOURCES} ${PROJECT_SOURCE_DIR}/visual_studio/stdint_msvc.h)
endif()
if(USE_GNU_LINK_FLAGS OR USE_LLVM_MACOS_LINK_FLAGS)
file(COPY "${PROJECT_SOURCE_DIR}/src/matio.sym" DESTINATION "${PROJECT_BINARY_DIR}/src")
if(USE_GNU_LINK_FLAGS)
set(MATIO_LINKER_FLAGS " -Wl,--no-undefined -Wl,--retain-symbols-file,${PROJECT_BINARY_DIR}/src/matio.sym")
else()
file(READ "${PROJECT_BINARY_DIR}/src/matio.sym" SYM_CONTENTS)
string(REPLACE "Mat_" "_Mat_" SYM_CONTENTS ${SYM_CONTENTS})
file(WRITE "${PROJECT_BINARY_DIR}/src/matio.sym" ${SYM_CONTENTS})
set(MATIO_LINKER_FLAGS " -Wl,-undefined,error -Wl,-exported_symbols_list,${PROJECT_BINARY_DIR}/src/matio.sym")
endif()
string(APPEND CMAKE_SHARED_LINKER_FLAGS ${MATIO_LINKER_FLAGS})
endif()
if(MATIO_SHARED)
add_library(${PROJECT_NAME} SHARED ${MATIO_SOURCES})
else()
add_library(${PROJECT_NAME} STATIC ${MATIO_SOURCES})
endif()
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_include_directories(${PROJECT_NAME}
INTERFACE ${PROJECT_SOURCE_DIR}/src
PUBLIC ${PROJECT_BINARY_DIR}/src
)
if(STDINT_MSVC)
target_include_directories(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/visual_studio)
endif()
if(HAVE_LIBM)
target_link_libraries(${PROJECT_NAME} PUBLIC m)
endif()
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS /wd4267)
set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME lib${PROJECT_NAME})
endif()
if(MATIO_WITH_HDF5 AND HDF5_FOUND)
target_link_libraries(${PROJECT_NAME} PUBLIC MATIO::HDF5)
endif()
if(MATIO_WITH_ZLIB AND ZLIB_FOUND)
target_link_libraries(${PROJECT_NAME} PUBLIC MATIO::ZLIB)
endif()
if(REQUIRE_EXPLICIT_LIBC_LINK)
target_link_libraries(${PROJECT_NAME} PUBLIC c)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ${MATIO_PIC})
# Convert matio_LIB_VERSIONINFO libtool version format into SOVERSION
# Convert from ":" separated into CMake list format using ";"
string(REPLACE ":" ";" matio_LIB_VERSIONINFO ${matio_LIB_VERSIONINFO})
list(GET matio_LIB_VERSIONINFO 0 matio_LIB_VERSION_CURRENT)
list(GET matio_LIB_VERSIONINFO 2 matio_LIB_VERSION_AGE)
math(EXPR matio_SOVERSION "${matio_LIB_VERSION_CURRENT} - ${matio_LIB_VERSION_AGE}")
set_target_properties(${PROJECT_NAME} PROPERTIES
SOVERSION ${matio_SOVERSION}
VERSION ${PROJECT_VERSION}
)
# specify the public headers
set(MATIO_PUBLIC_HEADERS
${PROJECT_SOURCE_DIR}/src/matio.h
${PROJECT_BINARY_DIR}/src/matio_pubconf.h
)
if(STDINT_MSVC)
set(MATIO_PUBLIC_HEADERS ${MATIO_PUBLIC_HEADERS} ${PROJECT_SOURCE_DIR}/visual_studio/stdint_msvc.h)
endif()
set_target_properties(${PROJECT_NAME} PROPERTIES PUBLIC_HEADER "${MATIO_PUBLIC_HEADERS}")
# 'make install' to the correct locations (provided by GNUInstallDirs).
install(TARGETS ${PROJECT_NAME} EXPORT lib${PROJECT_NAME}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
|