-# CMakeLists.txt for libsndfile
+cmake_minimum_required (VERSION 3.1..3.18)
-cmake_minimum_required (VERSION 3.0.0)
+# MSVC runtime library flags are selected by an abstraction, CMake >= 3.15
+# This policy still need to be set even with cmake_minimum_required() command above.
+if (POLICY CMP0091)
+ if ((DEFINED ENABLE_STATIC_RUNTIME) AND (DEFINED CMAKE_MSVC_RUNTIME_LIBRARY))
+ message (FATAL_ERROR "Both ENABLE_STATIC_RUNTIME and CMAKE_MSVC_RUNTIME_LIBRARY are set.")
+ return ()
+ endif ()
-project (libsndfile)
+ if (DEFINED CMAKE_MSVC_RUNTIME_LIBRARY)
+ cmake_policy (SET CMP0091 NEW)
+ else ()
+ cmake_policy (SET CMP0091 OLD)
+ endif ()
+endif ()
-# We may need these programs so detect them now.
-find_program (AUTOGEN autogen)
-find_program (AUTOHEADER autoheader)
-find_program (GREP grep)
-find_program (SED sed)
-find_program (WC wc)
+option (ENABLE_EXTERNAL_LIBS "Enable Vorbis, and Opus codecs" ON)
+if (ENABLE_EXTERNAL_LIBS)
+ list (APPEND VCPKG_MANIFEST_FEATURES "external-libs")
+endif ()
-include (CMake/file.cmake)
+option (ENABLE_MPEG "Enable MPEG codecs" ON)
+if (ENABLE_MPEG)
+ list (APPEND VCPKG_MANIFEST_FEATURES "mpeg")
+endif ()
-# Duplicate the autoconf/autoheader functionality.
+option (ENABLE_EXPERIMENTAL "Enable experimental code" OFF)
+if (ENABLE_EXPERIMENTAL)
+ list (APPEND VCPKG_MANIFEST_FEATURES "speex")
+endif ()
-# Get the version number from configure.ac.
-execute_process (
- COMMAND ${GREP} ^AC_INIT configure.ac
- COMMAND ${SED} "s/.*libsndfile[^0-9]*//;s/\\].*//"
- OUTPUT_VARIABLE LIB_VERSION
- )
+option (BUILD_REGTEST "Build regtest" OFF)
+if (BUILD_REGTEST)
+ list (APPEND VCPKG_MANIFEST_FEATURES "regtest")
+endif ()
-string (STRIP ${LIB_VERSION} LIB_VERSION)
-string (REGEX REPLACE "\\..*" "" LIB_VERSION_MAJOR ${LIB_VERSION})
+project(libsndfile VERSION 1.2.0)
-message (STATUS "libsndfile version : ${LIB_VERSION}")
+#
+# Variables
+#
-# Generate config.h.in if it does not already exist.
-if (NOT (EXISTS "${CMAKE_SOURCE_DIR}/CMakeFiles/config.h.in"))
- if (NOT AUTOHEADER)
- message (FATAL_ERROR "Need autoheader (part of GNU autoconf) to proceed.")
- endif ()
+set (CMAKE_C_STANDARD 99)
+set (CMAKE_C_STANDARD_REQUIRED TRUE)
+set_property(GLOBAL PROPERTY USE_FOLDERS ON)
- message (STATUS "Running autoheader to create src/config.h.in")
- execute_process (COMMAND ${AUTOHEADER} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})
+set (PACKAGE_NAME ${PROJECT_NAME})
+set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
+set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
+set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
+set (CPACK_PACKAGE_VERSION_STAGE "")
+set (CPACK_PACKAGE_VERSION_FULL "${PROJECT_VERSION}${CPACK_PACKAGE_VERSION_STAGE}")
- assert_line_count_non_zero ("${CMAKE_SOURCE_DIR}/src/config.h.in")
+#
+# System-wide includes
+#
- message (STATUS "Post processing src/config.h.in")
- execute_process (
- COMMAND ${SED} -E "s/undef([ \\t]+)([a-zA-Z0-8_]+)/define\\1\\2\\1@\\2@/" src/config.h.in
- COMMAND ${SED} "s/.*_FILE_OFFSET_BITS.*//"
- OUTPUT_FILE ${CMAKE_SOURCE_DIR}/CMakeFiles/config.h.in
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
- )
+include (GNUInstallDirs)
+include (FeatureSummary)
+include (CMakeDependentOption)
+include (CTest)
+include (CheckCCompilerFlag)
- execute_process (
- COMMAND ${GREP} -c undef ${CMAKE_SOURCE_DIR}/CMakeFiles/config.h.in
- OUTPUT_VARIABLE undef_count
- )
+#
+# Options
+#
+
+option (BUILD_SHARED_LIBS "Build shared libraries" OFF)
+if (BUILD_SHARED_LIBS AND BUILD_TESTING)
+ set (BUILD_TESTING OFF)
+ message ("Build testing required static libraries. To prevent build errors BUILD_TESTING disabled.")
+endif ()
+option (BUILD_PROGRAMS "Build programs" ON)
+option (BUILD_EXAMPLES "Build examples" ON)
+option (ENABLE_CPACK "Enable CPack support" ON)
+option (ENABLE_BOW_DOCS "Enable black-on-white html docs" OFF)
+if (MSVC AND (DEFINED ENABLE_STATIC_RUNTIME))
+ option (ENABLE_STATIC_RUNTIME "Enable static runtime" ${ENABLE_STATIC_RUNTIME})
+elseif (MINGW)
+ option (ENABLE_STATIC_RUNTIME "Enable static runtime" OFF)
+endif ()
+option (ENABLE_PACKAGE_CONFIG "Generate and install package config file" ON)
+option (INSTALL_PKGCONFIG_MODULE "Generate and install pkg-config module" ON)
+
+list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+if (CMAKE_VERSION VERSION_LESS 3.14)
+ list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/sqlite")
+endif ()
+
+#
+# Setup definitions
+#
+
+include(SndFileChecks)
+
+if (ENABLE_EXTERNAL_LIBS AND NOT (Vorbis_FOUND OR OPUS_FOUND))
+ set (ENABLE_EXTERNAL_LIBS OFF)
+endif()
+if(ENABLE_MPEG AND (NOT HAVE_MPEG_LIBS))
+ set (ENABLE_MPEG OFF)
+endif()
+if (BUILD_REGTEST AND (NOT SQLITE3_FOUND))
+ set (BUILD_REGTEST OFF)
+endif()
+
+cmake_dependent_option (ENABLE_CPU_CLIP "Enable tricky cpu specific clipper" ON "CPU_CLIPS_POSITIVE;CPU_CLIPS_NEGATIVE" OFF)
+if (NOT ENABLE_CPU_CLIP)
+ set (CPU_CLIPS_POSITIVE FALSE)
+ set (CPU_CLIPS_NEGATIVE FALSE)
+endif ()
+cmake_dependent_option (ENABLE_COMPATIBLE_LIBSNDFILE_NAME "Set DLL name to libsndfile-1.dll (canonical name), sndfile.dll otherwise" OFF "WIN32;BUILD_SHARED_LIBS" OFF)
+cmake_dependent_option (INSTALL_MANPAGES "Install man pages for programs" ON "BUILD_PROGRAMS" OFF)
- if (${undef_count} GREATER 0)
- message (FATAL_ERROR "CMake processing of CMakeFIles/config.h.in has failed.")
+if (NOT MSVC)
+ if (CPU_IS_X86)
+ check_c_compiler_flag (-msse2 HAVE_MSSE2_COMPILER_FLAG)
+ if (HAVE_MSSE2_COMPILER_FLAG)
+ cmake_dependent_option (ENABLE_SSE2 "Add SSE2 compiler flag" ON "HAVE_MSSE2_COMPILER_FLAG" OFF)
endif ()
endif ()
+endif ()
+if (ENABLE_SSE2)
+ add_compile_options (-msse2)
+endif ()
-assert_line_count_non_zero ("${CMAKE_SOURCE_DIR}/CMakeFiles/config.h.in")
-
-# Use autogen to generate files if they don't already exist.
-include (CMake/autogen.cmake)
-lsf_autogen (src test_endswap)
-lsf_autogen (tests pcm_test)
-lsf_autogen (tests utils)
-lsf_autogen (tests floating_point_test)
-lsf_autogen (tests header_test)
-lsf_autogen (tests pipe_test)
-lsf_autogen (tests write_read_test)
-lsf_autogen (tests scale_clip_test)
-lsf_autogen (tests rdwr_test)
-lsf_autogen (tests benchmark)
-
-if (DEFINED ENV{CC})
- set (CMAKE_C_COMPILER $ENV{CC})
- endif()
+set (HAVE_EXTERNAL_XIPH_LIBS ${ENABLE_EXTERNAL_LIBS})
+set (HAVE_SQLITE3 ${BUILD_REGTEST})
+set (HAVE_ALSA_ASOUNDLIB_H ${ALSA_FOUND})
+set (HAVE_SNDIO_H ${SNDIO_FOUND})
-if (DEFINED ENV{CXX})
- set (CMAKE_CXX_COMPILER $ENV{CXX})
- endif()
+set (ENABLE_EXPERIMENTAL_CODE ${ENABLE_EXPERIMENTAL})
+set (HAVE_MPEG ${ENABLE_MPEG})
+set (HAVE_SPEEX ${ENABLE_EXPERIMENTAL})
+
+add_feature_info (BUILD_SHARED_LIBS BUILD_SHARED_LIBS "build shared libraries")
+add_feature_info (ENABLE_EXTERNAL_LIBS ENABLE_EXTERNAL_LIBS "enable Vorbis, and Opus codecs")
+add_feature_info (ENABLE_MPEG ENABLE_MPEG "enable MPEG audio (including mp3) codecs")
+add_feature_info (ENABLE_EXPERIMENTAL ENABLE_EXPERIMENTAL "enable experimental code")
+add_feature_info (BUILD_TESTING BUILD_TESTING "build tests")
+add_feature_info (BUILD_REGTEST BUILD_REGTEST "build regtest")
+add_feature_info (ENABLE_CPACK ENABLE_CPACK "enable CPack support")
+add_feature_info (ENABLE_CPU_CLIP ENABLE_CPU_CLIP "Enable tricky cpu specific clipper")
+add_feature_info (ENABLE_BOW_DOCS ENABLE_BOW_DOCS "enable black-on-white html docs")
+add_feature_info (ENABLE_PACKAGE_CONFIG ENABLE_PACKAGE_CONFIG "generate and install package config file")
+add_feature_info (INSTALL_PKGCONFIG_MODULE INSTALL_PKGCONFIG_MODULE "generate and install pkg-config module")
+add_feature_info (INSTALL_MANPAGES INSTALL_MANPAGES "install man pages for programs")
+if (WIN32 AND BUILD_SHARED_LIBS)
+ add_feature_info (ENABLE_COMPATIBLE_LIBSNDFILE_NAME ENABLE_COMPATIBLE_LIBSNDFILE_NAME "Set DLL name to libsndfile-1.dll (canonical name), sndfile.dll otherwise")
+endif ()
-message (STATUS "System : ${CMAKE_SYSTEM_NAME}")
-message (STATUS "Processor : ${CMAKE_SYSTEM_PROCESSOR}")
-message (STATUS "C compiler : ${CMAKE_C_COMPILER_ID}")
-message (STATUS "C++ compiler : ${CMAKE_CXX_COMPILER_ID}")
+if (HAVE_MSSE2_COMPILER_FLAG)
+ add_feature_info (ENABLE_SSE2 ENABLE_SSE2 "add SSE2 compiler flag")
+endif ()
-#-------------------------------------------------------------------------------
-set (PACKAGE \"libsndfile\")
-set (PACKAGE_NAME \"libsndfile\")
-set (VERSION \"${LIB_VERSION}\")
-set (PACKAGE_VERSION \"${LIB_VERSION}\")
-set (BASEPATH "${CMAKE_SOURCE_DIR}")
-include (CMake/build.cmake)
-include (CMake/external_libs.cmake)
-include (CMake/libsndfile.cmake)
+set_package_properties (Ogg PROPERTIES
+ TYPE RECOMMENDED
+ URL "www.xiph.org/ogg/"
+ DESCRIPTION "library for manipulating ogg bitstreams"
+ PURPOSE "Required to enable Vorbis, Speex, and Opus support"
+ )
+set_package_properties (Vorbis PROPERTIES
+ TYPE RECOMMENDED
+ URL "www.vorbis.com/"
+ DESCRIPTION "open source lossy audio codec"
+ PURPOSE "Enables Vorbis support"
+ )
+set_package_properties (mp3lame PROPERTIES
+ TYPE RECOMMENDED
+ URL "https://lame.sourceforge.io/"
+ DESCRIPTION "High quality MPEG Audio Layer III (MP3) encoder"
+ PURPOSE "Enables MPEG layer III (MP3) writing support"
+ )
+set_package_properties (MPG123 PROPERTIES
+ TYPE RECOMMENDED
+ URL "https://www.mpg123.de/"
+ DESCRIPTION "MPEG Audio Layer I/II/III decoder"
+ PURPOSE "Enables MPEG Audio reading support"
+ )
+set_package_properties(Opus PROPERTIES
+ TYPE RECOMMENDED
+ URL "www.opus-codec.org/"
+ DESCRIPTION "Standardized open source low-latency fullband codec"
+ PURPOSE "Enables experimental Opus support"
+ )
+set_package_properties(Speex PROPERTIES TYPE OPTIONAL
+ URL "www.speex.org/"
+ DESCRIPTION "an audio codec tuned for speech"
+ PURPOSE "Enables experemental Speex support"
+ )
+set_package_properties (SQLite3 PROPERTIES
+ TYPE OPTIONAL
+ URL "www.sqlite.org/"
+ DESCRIPTION "light weight SQL database engine."
+ PURPOSE "Enables regtest"
+ )
+if (BUILD_SHARED_LIBS)
+ set_package_properties (PythonInterp PROPERTIES
+ TYPE REQUIRED
+ URL "www.python.org/"
+ DESCRIPTION "Python is a widely used high-level programming language."
+ PURPOSE "Required to build shared libraries"
+ )
+endif()
+
+feature_summary (WHAT ALL)
+
+#
+# Setup configuration
+#
-if (CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang" OR CMAKE_C_COMPILER_ID STREQUAL "AppleClang")
- set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -std=gnu99 -Wall -Wextra" CACHE STRING "" FORCE)
- set (CMAKE_CXX__FLAGS "${CMAKE_C_FLAGS} -O3 -std=gnu99 -Wall -Wextra" CACHE STRING "" FORCE)
+configure_file (src/config.h.cmake src/config.h)
- set (COMPILER_IS_GCC 1)
- set (_POSIX_SOURCE 1)
+if (INSTALL_PKGCONFIG_MODULE)
- if (${Werror} MATCHES "on")
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror" CACHE STRING "" FORCE)
+ set (prefix ${CMAKE_INSTALL_PREFIX})
+ set (exec_prefix "\$\{prefix\}")
+ set (libdir "\$\{prefix\}/${CMAKE_INSTALL_LIBDIR}")
+ set (includedir "\$\{prefix\}/${CMAKE_INSTALL_INCLUDEDIR}")
+ set (VERSION ${PROJECT_VERSION})
+ if (ENABLE_EXTERNAL_LIBS)
+ set (EXTERNAL_XIPH_REQUIRE "ogg vorbis vorbisenc opus")
+ if (ENABLE_EXPERIMENTAL)
+ set (EXTERNAL_XIPH_REQUIRE "${EXTERNAL_XIPH_REQUIRE} speex")
endif ()
endif ()
+ if (ENABLE_MPEG)
+ set (EXTERNAL_MPEG_REQUIRE "libmpg123")
+ set (EXTERNAL_MPEG_LIBS "-lmp3lame")
+ endif ()
-if (CMAKE_C_COMPILER_ID STREQUAL "MSVC")
- # Untested. Probably does not work. Patches accepted.
+ configure_file (sndfile.pc.in sndfile.pc @ONLY)
- set (CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4996" CACHE STRING "" FORCE)
- add_definitions ("/wd4244 /wd4996")
- endif ()
+endif ()
+#
+# libsndfile
+#
-# Need to actually detect this.
-set (CPU_CLIPS_POSITIVE 0)
-set (CPU_CLIPS_NEGATIVE 0)
-
-set (ENABLE_EXPERIMENTAL_CODE 0)
-
-find_external_xiph_libs (HAVE_EXTERNAL_XIPH_LIBS EXTERNAL_XIPH_CFLAGS EXTERNAL_XIPH_LIBS)
-
-#-------------------------------------------------------------------------------
-# Project definitions follow.
-
-configure_file (${CMAKE_SOURCE_DIR}/src/sndfile.h.in ${CMAKE_SOURCE_DIR}/src/sndfile.h)
-configure_file (${CMAKE_SOURCE_DIR}/CMakeFiles/config.h.in ${CMAKE_SOURCE_DIR}/src/config.h)
-
-include_directories (src)
-
-set (libsndfile_sources
- src/ALAC/ALACBitUtilities.c
- src/ALAC/ag_dec.c
- src/ALAC/ag_enc.c
- src/ALAC/alac_decoder.c
- src/ALAC/alac_encoder.c
- src/ALAC/dp_dec.c
- src/ALAC/dp_enc.c
- src/ALAC/matrix_dec.c
- src/ALAC/matrix_enc.c
-
- src/G72x/g721.c
- src/G72x/g723_16.c
- src/G72x/g723_24.c
- src/G72x/g723_40.c
- src/G72x/g72x.c
- src/G72x/g72x_test.c
-
- src/GSM610/add.c
- src/GSM610/code.c
- src/GSM610/decode.c
- src/GSM610/gsm_create.c
- src/GSM610/gsm_decode.c
- src/GSM610/gsm_destroy.c
- src/GSM610/gsm_encode.c
- src/GSM610/gsm_option.c
- src/GSM610/long_term.c
- src/GSM610/lpc.c
- src/GSM610/preprocess.c
- src/GSM610/rpe.c
- src/GSM610/short_term.c
- src/GSM610/table.c
+# Public libsndfile headers
+set (sndfile_HDRS
+ include/sndfile.h
+ include/sndfile.hh
+ )
- src/aiff.c
- src/alac.c
+#
+# libsndfile static library
+#
+
+add_library (sndfile
+ src/sfconfig.h
+ src/sfendian.h
+ src/sf_unistd.h
+ src/common.h
+ src/common.c
+ src/file_io.c
+ src/command.c
+ src/pcm.c
+ src/ulaw.c
src/alaw.c
- src/au.c
- src/audio_detect.c
- src/avr.c
- src/broadcast.c
- src/caf.c
+ src/float32.c
+ src/double64.c
+ src/ima_adpcm.c
+ src/ms_adpcm.c
+ src/dwvw.c
+ src/vox_adpcm.c
+ src/interleave.c
+ src/strings.c
+ src/dither.c
src/cart.c
- src/chanmap.c
+ src/broadcast.c
+ src/audio_detect.c
+ src/ima_oki_adpcm.c
+ src/ima_oki_adpcm.h
src/chunk.c
- src/command.c
- src/common.c
- src/dither.c
- src/double64.c
+ src/ogg.h
+ src/ogg.c
+ src/chanmap.h
+ src/chanmap.c
+ src/id3.h
+ src/id3.c
+ $<$<BOOL:${WIN32}>:src/windows.c>
+ src/sndfile.c
+ src/aiff.c
+ src/au.c
+ src/avr.c
src/dwd.c
- src/dwvw.c
- src/file_io.c
src/flac.c
- src/float32.c
- src/g72x.c
- src/gsm610.c
src/htk.c
- src/id3.c
- src/ima_adpcm.c
- src/ima_oki_adpcm.c
- src/interleave.c
src/ircam.c
src/macos.c
src/mat4.c
src/mat5.c
- src/mpc2k.c
- src/ms_adpcm.c
src/nist.c
- src/ogg.c
- src/ogg_opus.c
- src/ogg_pcm.c
- src/ogg_speex.c
- src/ogg_vorbis.c
src/paf.c
- src/pcm.c
src/pvf.c
src/raw.c
- src/rf64.c
src/rx2.c
src/sd2.c
src/sds.c
- src/sndfile.c
- src/strings.c
src/svx.c
src/txw.c
- src/ulaw.c
src/voc.c
- src/vox_adpcm.c
+ src/wve.c
src/w64.c
- src/wav.c
+ src/wavlike.h
src/wavlike.c
- src/windows.c
- src/wve.c
+ src/wav.c
src/xi.c
+ src/mpc2k.c
+ src/rf64.c
+ src/ogg_vorbis.c
+ src/ogg_speex.c
+ src/ogg_pcm.c
+ src/ogg_opus.c
+ src/ogg_vcomment.h
+ src/ogg_vcomment.c
+ src/nms_adpcm.c
+ src/mpeg.c
+ src/mpeg_decode.c
+ src/mpeg_l3_encode.c
+ ${sndfile_HDRS}
+ ${CMAKE_CURRENT_BINARY_DIR}/src/config.h
)
-add_library (sndfile SHARED
- ${libsndfile_sources}
+add_library (SndFile::sndfile ALIAS sndfile)
+
+target_include_directories (sndfile
+ PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ PRIVATE
+ src
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src>
+ )
+target_link_libraries (sndfile
+ PRIVATE
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ $<$<BOOL:${LIBM_REQUIRED}>:dl>
+ $<$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>:Vorbis::vorbisenc>
+ $<$<AND:$<BOOL:${ENABLE_EXPERIMENTAL}>,$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>,$<BOOL:${HAVE_SPEEX}>>:Speex::Speex>
+ $<$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>:Opus::opus>
+ $<$<BOOL:${HAVE_MPEG}>:MPG123::libmpg123>
+ $<$<BOOL:${HAVE_MPEG}>:mp3lame::mp3lame>
+ )
+set_target_properties (sndfile PROPERTIES
+ PUBLIC_HEADER "${sndfile_HDRS}"
)
-target_link_libraries (sndfile LINK_PRIVATE ${EXTERNAL_XIPH_LIBS} LINK_PUBLIC m)
+if (ENABLE_COMPATIBLE_LIBSNDFILE_NAME)
+ if (MINGW OR CYGWIN)
+ set_target_properties (sndfile PROPERTIES
+ RUNTIME_OUTPUT_NAME "sndfile-1"
+ )
+ else ()
+ set_target_properties (sndfile PROPERTIES
+ RUNTIME_OUTPUT_NAME "libsndfile-1"
+ )
+ endif ()
+endif ()
+
+if (BUILD_SHARED_LIBS)
+
+ #
+ # ABI version of library.
+ #
+
+ #
+ # Read libtool version from `configure.ac` and set libsndfile ABI version:
+ #
+ # SNDFILE_ABI_VERSION_MAJOR
+ # SNDFILE_ABI_VERSION_MINOR
+ # SNDFILE_ABI_VERSION_PATCH
+ # SNDFILE_ABI_VERSION
+ #
+ # and Mach-O current and compatibility versions:
+ #
+ # SNDFILE_MACHO_CURRENT_VERSION
+ # SNDFILE_MACHO_COMPATIBILITY_VERSION
+ #
+
+ include (SetupABIVersions)
+
+ setup_abi_versions()
+
+ if (WIN32)
+ set (VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR})
+ set (GEN_TOOL cmake)
+
+ set (WIN_RC_VERSION "${CPACK_PACKAGE_VERSION_MAJOR},${CPACK_PACKAGE_VERSION_MINOR},${CPACK_PACKAGE_VERSION_PATCH}")
+ set (CLEAN_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+ set (PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
+
+ configure_file (src/version-metadata.rc.in src/version-metadata.rc @ONLY)
+ target_sources (sndfile PRIVATE ${PROJECT_BINARY_DIR}/src/version-metadata.rc)
+ endif ()
+
+
+ set_target_properties (sndfile PROPERTIES
+ SOVERSION ${SNDFILE_ABI_VERSION_MAJOR}
+ VERSION ${SNDFILE_ABI_VERSION}
+ )
+
+ if (APPLE)
+ if (NOT (CMAKE_VERSION VERSION_LESS 3.17))
+ set_target_properties (sndfile PROPERTIES
+ MACHO_CURRENT_VERSION ${SNDFILE_MACHO_CURRENT_VERSION}
+ MACHO_COMPATIBILITY_VERSION ${SNDFILE_MACHO_COMPATIBILITY_VERSION}
+ )
+ else ()
+ message (FATAL_ERROR "Apple platform requires cmake >= 3.17 to build dylib.")
+ endif ()
+ endif ()
+
+ # Symbol files generation
+
+ if (WIN32)
+ set (SYMBOL_FILENAME "sndfile.def")
+ set (SYMBOL_OS "win32")
+ elseif ((CMAKE_SYSTEM_NAME MATCHES "Darwin") OR (CMAKE_SYSTEM_NAME MATCHES "Rhapsody"))
+ set (SYMBOL_FILENAME "Symbols.darwin")
+ set (SYMBOL_OS "darwin")
+ elseif (CMAKE_SYSTEM_NAME MATCHES "OS2")
+ set (SYMBOL_FILENAME "Symbols.os2")
+ set (SYMBOL_OS "os2")
+ elseif (UNIX)
+ set (SYMBOL_FILENAME "Symbols.gnu-binutils")
+ set (SYMBOL_OS "linux")
+ endif ()
+
+ if (DEFINED SYMBOL_OS)
+ add_custom_command (
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}
+ COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/create_symbols_file.py ${SYMBOL_OS} ${SNDFILE_ABI_VERSION} > ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}
+ COMMENT "Generating ${SYMBOL_FILENAME}..."
+ )
+
+ add_custom_target (GENFILES DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME})
+ if (SYMBOL_OS MATCHES "win32")
+ target_sources (sndfile
+ PRIVATE
+ ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}
+ )
+ elseif (SYMBOL_OS MATCHES "darwin")
+ add_dependencies (sndfile GENFILES)
+ if (CMAKE_VERSION VERSION_LESS 3.13)
+ set_property (TARGET sndfile APPEND_STRING PROPERTY
+ LINK_FLAGS "-Wl,-exported_symbols_list -Wl,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}"
+ )
+ else ()
+ target_link_options (sndfile PRIVATE "LINKER:-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}")
+ endif()
+ elseif (SYMBOL_OS MATCHES "os")
+ add_dependencies (sndfile GENFILES)
+ if (CMAKE_VERSION VERSION_LESS 3.13)
+ set_property (TARGET sndfile APPEND_STRING PROPERTY
+ LINK_FLAGS "-Wl,-export-symbols ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}"
+ )
+ else ()
+ target_link_options (sndfile PRIVATE "LINKER:-export-symbols ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}")
+ endif()
+ elseif (UNIX)
+ add_dependencies (sndfile GENFILES)
+ if (CMAKE_VERSION VERSION_LESS 3.13)
+ set_property (TARGET sndfile APPEND_STRING PROPERTY
+ LINK_FLAGS "-Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}"
+ )
+ else ()
+ target_link_options (sndfile PRIVATE "LINKER:--version-script,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}")
+ endif()
+ endif()
+ endif()
+
+endif ()
+
+#
+# Programs
+#
+
+if (BUILD_PROGRAMS)
+
+# sndfile-info
+
+ add_executable (sndfile-info
+ programs/sndfile-info.c
+ programs/common.c
+ programs/common.h
+ )
+ target_link_libraries (sndfile-info
+ PRIVATE
+ sndfile
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+# sndfile-play
+
+ add_executable (sndfile-play
+ $<$<NOT:$<BOOL:${BEOS}>>:programs/sndfile-play.c>
+ $<$<NOT:$<BOOL:${BEOS}>>:programs/common.c>
+ $<$<NOT:$<BOOL:${BEOS}>>:programs/sndfile-play.c>
+ $<$<BOOL:${BEOS}>:programs/sndfile-play-beos.cpp>
+ )
+ target_include_directories (sndfile-play
+ PRIVATE
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ )
+ target_link_libraries (sndfile-play PRIVATE $<$<BOOL:${LIBM_REQUIRED}>:m>)
+ target_link_libraries (sndfile-play PRIVATE sndfile)
+ if (WIN32)
+ target_link_libraries(sndfile-play PRIVATE winmm)
+ # Maybe ALSA & Sndio are present in BeOS. They are not required
+ # so skip them anyway.
+ elseif ((NOT BEOS) AND ALSA_FOUND)
+ target_include_directories (sndfile-play PRIVATE ${ALSA_INCLUDE_DIRS})
+ target_link_libraries (sndfile-play PRIVATE ${ALSA_LIBRARIES})
+ elseif (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
+ target_link_libraries (sndfile-play PRIVATE Sndio::Sndio)
+ endif ()
+
+# sndfile-convert
+
+ add_executable (sndfile-convert
+ programs/sndfile-convert.c
+ programs/common.c
+ programs/common.h
+ )
+ target_link_libraries (sndfile-convert PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+# sndfile-cmp
+
+ add_executable (sndfile-cmp
+ programs/sndfile-cmp.c
+ programs/common.c
+ programs/common.h
+ )
+ target_include_directories (sndfile-cmp
+ PUBLIC
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ ${CMAKE_CURRENT_BINARY_DIR}/tests
+ )
+ target_link_libraries (sndfile-cmp PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+# sndfile-metadata-set
+
+ add_executable (sndfile-metadata-set
+ programs/sndfile-metadata-set.c
+ programs/common.c
+ programs/common.h
+ )
+ target_include_directories (sndfile-metadata-set
+ PUBLIC
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ ${CMAKE_CURRENT_BINARY_DIR}/tests
+ )
+ target_link_libraries (sndfile-metadata-set PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+# sndfile-metadata-get
+
+ add_executable (sndfile-metadata-get
+ programs/sndfile-metadata-get.c
+ programs/common.c
+ programs/common.h
+ )
+ target_include_directories (sndfile-metadata-get
+ PUBLIC
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ ${CMAKE_CURRENT_BINARY_DIR}/tests
+ )
+ target_link_libraries (sndfile-metadata-get PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+# sndfile-interleave
+
+ add_executable (sndfile-interleave
+ programs/sndfile-interleave.c
+ programs/common.c
+ programs/common.h
+ )
+ target_link_libraries (sndfile-interleave PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+# sndfile-deinterleave
+
+ add_executable (sndfile-deinterleave
+ programs/sndfile-deinterleave.c
+ programs/common.c
+ programs/common.h
+ )
+ target_link_libraries (sndfile-deinterleave PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+# sndfile-concat
+
+ add_executable (sndfile-concat
+ programs/sndfile-concat.c
+ programs/common.c
+ programs/common.h
+ )
+ target_link_libraries (sndfile-concat PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+# sndfile-salvage
+
+ add_executable (sndfile-salvage
+ programs/sndfile-salvage.c
+ programs/common.c
+ programs/common.h
+ )
+ target_include_directories (sndfile-salvage
+ PUBLIC
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ ${CMAKE_CURRENT_BINARY_DIR}/tests
+ )
+ target_link_libraries (sndfile-salvage PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
+
+ set (SNDFILE_PROGRAM_TARGETS
+ sndfile-info
+ sndfile-play
+ sndfile-convert
+ sndfile-cmp
+ sndfile-metadata-set
+ sndfile-metadata-get
+ sndfile-interleave
+ sndfile-deinterleave
+ sndfile-concat
+ sndfile-salvage
+ )
+
+ set_target_properties(${SNDFILE_PROGRAM_TARGETS} PROPERTIES FOLDER Programs)
+
+endif ()
+
+#
+# Examples
+#
+
+if (BUILD_EXAMPLES)
+
+# sndfile-to-text
+
+ add_executable (sndfile-to-text examples/sndfile-to-text.c)
+ target_link_libraries (sndfile-to-text PRIVATE sndfile)
+
+# sndfile-loopify
+
+ add_executable (sndfile-loopify examples/sndfile-loopify.c)
+ target_link_libraries (sndfile-loopify PRIVATE sndfile)
+
+# make_sine
+
+ add_executable (make_sine examples/make_sine.c)
+ target_link_libraries (make_sine
+ PRIVATE
+ sndfile
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+# sfprocess
+
+ add_executable (sfprocess examples/sfprocess.c)
+ target_link_libraries (sfprocess
+ PRIVATE
+ sndfile
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+# list_formats
+
+ add_executable (list_formats examples/list_formats.c)
+ target_link_libraries (list_formats
+ PRIVATE
+ sndfile
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+# generate
+
+ add_executable (generate examples/generate.c)
+ target_link_libraries (generate PRIVATE sndfile)
+
+# sndfilehandle
+
+ add_executable (sndfilehandle examples/sndfilehandle.cc)
+ target_link_libraries (sndfilehandle PUBLIC sndfile)
+
+ set (SNDFILE_EXAMPLE_TARGETS
+ sndfile-to-text
+ sndfile-loopify
+ make_sine
+ sfprocess
+ list_formats
+ generate
+ sndfilehandle
+ )
+
+ set_target_properties(${SNDFILE_EXAMPLE_TARGETS} PROPERTIES FOLDER Examples)
-set_target_properties (sndfile
- PROPERTIES
- VERSION ${LIB_VERSION}
- SOVERSION ${LIB_VERSION_MAJOR}
- LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/src
+
+endif ()
+
+#
+# sndfile-regtest
+#
+
+if (BUILD_REGTEST)
+
+ add_executable (sndfile-regtest
+ regtest/sndfile-regtest.c
+ regtest/database.c
+ regtest/checksum.c
+ )
+ target_include_directories (sndfile-regtest
+ PUBLIC
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ ${CMAKE_CURRENT_BINARY_DIR}/tests
+ )
+ target_link_libraries(sndfile-regtest
+ PRIVATE
+ sndfile
+ SQLite::SQLite3
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+endif ()
+
+#
+# Installation
+#
+
+if (ENABLE_PACKAGE_CONFIG)
+
+ if (WIN32 AND (NOT MINGW) AND (NOT CYGWIN))
+ set (CMAKE_INSTALL_PACKAGEDIR cmake)
+ else ()
+ set (CMAKE_INSTALL_PACKAGEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/SndFile)
+ endif()
+
+ install (TARGETS ${SNDFILE_PROGRAM_TARGETS}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+
+ install (TARGETS sndfile
+ EXPORT SndFileTargets
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
-#-------------------------------------------------------------------------------
-# Programs.
-
-lsf_build_program (sndfile-cmp)
-lsf_build_program (sndfile-concat)
-lsf_build_program (sndfile-convert)
-lsf_build_program (sndfile-deinterleave)
-lsf_build_program (sndfile-info)
-lsf_build_program (sndfile-interleave)
-lsf_build_program (sndfile-metadata-get)
-lsf_build_program (sndfile-metadata-set)
-lsf_build_program (sndfile-salvage)
-lsf_build_program_extra (sndfile-play asound)
-
-#-------------------------------------------------------------------------------
-# Tests.
-
-configure_file (${CMAKE_SOURCE_DIR}/tests/test_wrapper.sh.in ${CMAKE_SOURCE_DIR}/tests/test_wrapper.sh)
-configure_file (${CMAKE_SOURCE_DIR}/tests/pedantic-header-test.sh.in ${CMAKE_SOURCE_DIR}/tests/pedantic-header-test.sh)
-
-add_custom_target (check
- COMMAND src/test_main && bash tests/test_wrapper.sh
- DEPENDS src/test_main tests/test_wrapper.sh
+ export (EXPORT SndFileTargets NAMESPACE SndFile:: FILE ${PROJECT_BINARY_DIR}/SndFileTargets.cmake)
+
+ include (CMakePackageConfigHelpers)
+
+ if (ENABLE_EXTERNAL_LIBS)
+ set (SndFile_WITH_EXTERNAL_LIBS 1)
+ else ()
+ set (SndFile_WITH_EXTERNAL_LIBS 0)
+ endif ()
+
+ if(ENABLE_MPEG)
+ set (SndFile_WITH_MPEG 1)
+ else ()
+ set (SndFile_WITH_MPEG 0)
+ endif ()
+
+ set (INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
+ configure_package_config_file(cmake/SndFileConfig.cmake.in SndFileConfig.cmake
+ INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
+ INSTALL_PREFIX ${PROJECT_BINARY_DIR}
+ PATH_VARS INCLUDE_INSTALL_DIR
+ )
+ configure_package_config_file(cmake/SndFileConfig.cmake.in SndFileConfig2.cmake
+ INSTALL_DESTINATION ${CMAKE_INSTALL_PACKAGEDIR}
+ PATH_VARS INCLUDE_INSTALL_DIR
+ )
+ write_basic_package_version_file (SndFileConfigVersion.cmake COMPATIBILITY SameMajorVersion)
+
+ install(EXPORT SndFileTargets
+ NAMESPACE SndFile::
+ DESTINATION ${CMAKE_INSTALL_PACKAGEDIR}
+ )
+ install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/SndFileConfig2.cmake
+ RENAME SndFileConfig.cmake
+ DESTINATION ${CMAKE_INSTALL_PACKAGEDIR}
+ )
+ install(
+ FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/SndFileConfigVersion.cmake
+ DESTINATION ${CMAKE_INSTALL_PACKAGEDIR}
+ )
+
+else ()
+
+ install (TARGETS sndfile ${sdnfile_PROGRAMS}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+endif ()
+
+if (INSTALL_MANPAGES)
+
+ set (man_MANS
+ man/sndfile-info.1
+ man/sndfile-play.1
+ man/sndfile-convert.1
+ man/sndfile-cmp.1
+ man/sndfile-metadata-get.1
+ man/sndfile-concat.1
+ man/sndfile-interleave.1
+ man/sndfile-salvage.1
+ )
+ install (FILES ${man_MANS} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
+ install (FILES man/sndfile-metadata-get.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME sndfile-metadata-set.1)
+ install (FILES man/sndfile-interleave.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME sndfile-deinterleave.1)
+endif ()
+
+if (ENABLE_BOW_DOCS)
+ set (HTML_BGCOLOUR "white")
+ set (HTML_FGCOLOUR "black")
+else ()
+ set (HTML_BGCOLOUR "black")
+ set (HTML_FGCOLOUR "white")
+endif ()
+set (dist_doc_DATA
+ docs/index.md
+ docs/libsndfile.jpg
+ docs/libsndfile.css
+ docs/print.css
+ docs/api.md
+ docs/command.md
+ docs/bugs.md
+ docs/formats.md
+ docs/sndfile_info.md
+ docs/new_file_type_howto.md
+ docs/win32.md
+ docs/FAQ.md
+ docs/lists.md
+ docs/embedded_files.md
+ docs/octave.md
+ docs/tutorial.md
)
+install (FILES ${dist_doc_DATA} DESTINATION ${CMAKE_INSTALL_DOCDIR})
-# Tests from the src/ directory.
-set (src_test_sources
- src/audio_detect.c
- src/broadcast.c
- src/cart.c
- src/common.c
- src/double64.c
- src/file_io.c
- src/float32.c
- src/test_audio_detect.c
- src/test_broadcast_var.c
- src/test_cart_var.c
- src/test_conversions.c
- src/test_endswap.c
- src/test_file_io.c
- src/test_float.c
- src/test_ima_oki_adpcm.c
- src/test_log_printf.c
- src/test_strncpy_crlf.c
+if (INSTALL_PKGCONFIG_MODULE)
+ install (FILES ${CMAKE_CURRENT_BINARY_DIR}/sndfile.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
+endif ()
+
+#
+# Testing
+#
+
+if (BUILD_TESTING)
+
+ enable_testing ()
+
+ include (CMakeAutoGen)
+
+ # generate tests sources from autogen templates
+ lsf_autogen (tests benchmark c)
+ lsf_autogen (tests floating_point_test c)
+ lsf_autogen (tests header_test c)
+ lsf_autogen (tests pcm_test c)
+ lsf_autogen (tests pipe_test c)
+ lsf_autogen (tests rdwr_test c)
+ lsf_autogen (tests scale_clip_test c)
+ lsf_autogen (tests utils c h)
+ lsf_autogen (tests write_read_test c)
+ lsf_autogen (src test_endswap c)
+
+ # utils static library
+ add_library(test_utils STATIC tests/utils.c)
+ target_include_directories (test_utils
+ PUBLIC
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ ${CMAKE_CURRENT_BINARY_DIR}/tests
+ )
+ target_link_libraries(test_utils PRIVATE sndfile)
+
+ ### test_main
+
+ add_executable (test_main
+ src/test_main.c
+ src/test_main.h
+ src/test_conversions.c
+ src/test_float.c
+ src/test_endswap.c
+ src/test_audio_detect.c
+ src/test_log_printf.c
+ src/test_file_io.c
+ src/test_ima_oki_adpcm.c
+ src/test_strncpy_crlf.c
+ src/test_broadcast_var.c
+ src/test_cart_var.c
+ src/test_binheader_writef.c
+ src/test_nms_adpcm.c
+ )
+ target_include_directories (test_main
+ PUBLIC
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ ${CMAKE_CURRENT_BINARY_DIR}/tests
+ )
+ target_link_libraries (test_main PRIVATE sndfile)
+ if (MSVC)
+ target_compile_definitions (test_main PRIVATE _USE_MATH_DEFINES)
+ endif ()
+ add_test (test_main test_main)
+
+ ### sfversion_test
+
+ add_executable (sfversion tests/sfversion.c)
+ target_include_directories (sfversion
+ PRIVATE
+ src
+ ${CMAKE_CURRENT_BINARY_DIR}/src
+ )
+ target_link_libraries (sfversion sndfile)
+ add_test (sfversion sfversion)
+ set_tests_properties (sfversion PROPERTIES
+ PASS_REGULAR_EXPRESSION "${PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_FULL}"
+ )
+
+ ### error_test
+
+ add_executable (error_test tests/error_test.c)
+ target_link_libraries (error_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (error_test error_test)
+
+ ### ulaw_test
+ add_executable (ulaw_test tests/ulaw_test.c)
+ target_link_libraries (ulaw_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (ulaw_test ulaw_test)
+
+ ### alaw_test
+ add_executable (alaw_test tests/alaw_test.c)
+ target_link_libraries (alaw_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (alaw_test alaw_test)
+
+ ### dwvw_test
+
+ add_executable (dwvw_test tests/dwvw_test.c)
+ target_link_libraries (dwvw_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (dwvw_test dwvw_test)
+
+ ### command_test
+
+ add_executable (command_test tests/command_test.c)
+ target_link_libraries (command_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (command_test command_test all)
+
+ ### floating_point_test
+
+ add_executable (floating_point_test
+ tests/dft_cmp.c
+ tests/floating_point_test.c
+ )
+ target_link_libraries (floating_point_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ target_include_directories (floating_point_test PRIVATE tests)
+ add_test (floating_point_test floating_point_test)
+
+ ### checksum_test
+
+ add_executable (checksum_test tests/checksum_test.c)
+ target_link_libraries (checksum_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (checksum_test checksum_test)
+
+ ### scale_clip_test
+
+ add_executable (scale_clip_test tests/scale_clip_test.c)
+ target_link_libraries (scale_clip_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (scale_clip_test scale_clip_test)
+
+ ### headerless_test
+
+ add_executable (headerless_test tests/headerless_test.c)
+ target_link_libraries (headerless_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (headerless_test headerless_test)
+
+ ### rdwr_test
+
+ add_executable (rdwr_test tests/rdwr_test.c)
+ target_link_libraries (rdwr_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (rdwr_test rdwr_test)
+
+ ### locale_test
+
+ add_executable (locale_test tests/locale_test.c)
+ target_link_libraries (locale_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (locale_test locale_test)
+
+ ### win32_ordinal_test
+
+# Disabled because we cannot test with shared sndfile library
+# if (WIN32 AND BUILD_SHARED_LIBS)
+# add_executable (win32_ordinal_test tests/win32_ordinal_test.c)
+# target_link_libraries (win32_ordinal_test PRIVATE sndfile test_utils)
+# add_test (win32_ordinal_test win32_ordinal_test)
+# endif ()
+
+ ### cpp_test
+
+ add_executable (cpp_test tests/cpp_test.cc)
+ target_link_libraries (cpp_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (cpp_test cpp_test)
+
+ ### external_libs_test
+
+ add_executable (external_libs_test tests/external_libs_test.c)
+ target_link_libraries (external_libs_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (external_libs_test external_libs_test)
+
+ ### format_check_test
+
+ add_executable (format_check_test tests/format_check_test.c)
+ target_link_libraries (format_check_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (format_check_test format_check_test)
+
+ ### channel_test
+
+ add_executable (channel_test tests/channel_test.c)
+ target_link_libraries (channel_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (channel_test channel_test)
+
+ ### pcm_test
+
+ add_executable (pcm_test tests/pcm_test.c)
+ target_link_libraries (pcm_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ add_test (pcm_test pcm_test)
+
+ ### common test executables
+
+ add_executable (write_read_test
+ tests/generate.c
+ tests/write_read_test.c
)
+ target_link_libraries (write_read_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ target_include_directories (write_read_test PRIVATE tests)
+
+ add_executable (lossy_comp_test tests/lossy_comp_test.c)
+ target_link_libraries (lossy_comp_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (peak_chunk_test tests/peak_chunk_test.c)
+ target_link_libraries (peak_chunk_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (header_test tests/header_test.c)
+ target_link_libraries (header_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (misc_test tests/misc_test.c)
+ target_link_libraries (misc_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (string_test tests/string_test.c)
+ target_link_libraries (string_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (multi_file_test tests/multi_file_test.c)
+ target_link_libraries (multi_file_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (aiff_rw_test tests/aiff_rw_test.c)
+ target_link_libraries (aiff_rw_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (chunk_test tests/chunk_test.c)
+ target_link_libraries (chunk_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (long_read_write_test tests/long_read_write_test.c)
+ target_link_libraries (long_read_write_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (raw_test tests/raw_test.c)
+ target_link_libraries (raw_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (compression_size_test tests/compression_size_test.c)
+ target_link_libraries (compression_size_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (ogg_test tests/ogg_test.c)
+ target_link_libraries (ogg_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (ogg_opus_test tests/ogg_opus_test.c)
+ target_link_libraries (ogg_opus_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (mpeg_test tests/mpeg_test.c)
+ target_link_libraries (mpeg_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (stdin_test tests/stdin_test.c)
+ target_link_libraries (stdin_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ set_target_properties (stdin_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "tests")
+
+ add_executable (stdout_test tests/stdout_test.c)
+ target_link_libraries (stdout_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+ set_target_properties (stdout_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "tests")
+
+ add_executable (stdio_test tests/stdio_test.c)
+ target_link_libraries (stdio_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (pipe_test tests/pipe_test.c)
+ target_link_libraries (pipe_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ add_executable (virtual_io_test tests/virtual_io_test.c)
+ target_link_libraries (virtual_io_test
+ PRIVATE
+ sndfile
+ test_utils
+ $<$<BOOL:${LIBM_REQUIRED}>:m>
+ )
+
+ ### aiff-tests
+
+ add_test (write_read_test_aiff write_read_test aiff)
+ add_test (lossy_comp_test_aiff_ulaw lossy_comp_test aiff_ulaw)
+ add_test (lossy_comp_test_aiff_alaw lossy_comp_test aiff_alaw)
+ add_test (peak_chunk_test_aiff peak_chunk_test aiff)
+ add_test (header_test_aiff header_test aiff)
+ add_test (misc_test_aiff misc_test aiff)
+ add_test (string_test_aiff string_test aiff)
+ add_test (multi_file_test_aiff multi_file_test aiff)
+ add_test (aiff_rw_test aiff_rw_test)
+
+ ### au-tests
+
+ add_test (write_read_test_au write_read_test au)
+ add_test (lossy_comp_test_au_ulaw lossy_comp_test au_ulaw)
+ add_test (lossy_comp_test_au_alaw lossy_comp_test au_alaw)
+ add_test (header_test_au header_test au)
+ add_test (misc_test_au misc_test au)
+ add_test (multi_file_test_au multi_file_test au)
+
+ # wav-tests
+ add_test (write_read_test_wav write_read_test wav)
+ add_test (lossy_comp_test_wav_pcm lossy_comp_test wav_pcm)
+ add_test (lossy_comp_test_wav_ima lossy_comp_test wav_ima)
+ add_test (lossy_comp_test_wav_msadpcm lossy_comp_test wav_msadpcm)
+ add_test (lossy_comp_test_wav_ulaw lossy_comp_test wav_ulaw)
+ add_test (lossy_comp_test_wav_alaw lossy_comp_test wav_alaw)
+ add_test (lossy_comp_test_wav_nmsadpcm lossy_comp_test wav_nmsadpcm)
+ add_test (peak_chunk_test_wav peak_chunk_test wav)
+ add_test (header_test_wav header_test wav)
+ add_test (misc_test_wav misc_test wav)
+ add_test (string_test_wav string_test wav)
+ add_test (multi_file_test_wav multi_file_test wav)
+ add_test (chunk_test_wav chunk_test wav)
+
+ ### w64-tests
+
+ add_test (write_read_test_w64 write_read_test w64)
+ add_test (lossy_comp_test_w64_ima lossy_comp_test w64_ima)
+ add_test (lossy_comp_test_w64_msadpcm lossy_comp_test w64_msadpcm)
+ add_test (lossy_comp_test_w64_ulaw lossy_comp_test w64_ulaw)
+ add_test (lossy_comp_test_w64_alaw lossy_comp_test w64_alaw)
+ add_test (header_test_w64 header_test w64)
+ add_test (misc_test_w64 misc_test w64)
+
+ ### rf64-tests
+
+ add_test (write_read_test_rf64 write_read_test rf64)
+ add_test (header_test_rf64 header_test rf64)
+ add_test (misc_test_rf64 misc_test rf64)
+ add_test (string_test_rf64 string_test rf64)
+ add_test (peak_chunk_test_rf64 peak_chunk_test rf64)
+ add_test (chunk_test_rf64 chunk_test rf64)
+
+ ### raw-tests
+ add_test (write_read_test_raw write_read_test raw)
+ add_test (lossy_comp_test_raw_ulaw lossy_comp_test raw_ulaw)
+ add_test (lossy_comp_test_raw_alaw lossy_comp_test raw_alaw)
+ add_test (lossy_comp_test_vox_adpcm lossy_comp_test vox_adpcm)
+ add_test (raw_test raw_test)
+
+ ### paf-tests
+ add_test (write_read_test_paf write_read_test paf)
+ add_test (header_test_paf header_test paf)
+ add_test (misc_test_paf misc_test paf)
+
+ ### svx-tests
+ add_test (write_read_test_svx write_read_test svx)
+ add_test (header_test_svx header_test svx)
+ add_test (misc_test_svx misc_test svx)
+
+ ### nist-tests
+ add_test (write_read_test_nist write_read_test nist)
+ add_test (lossy_comp_test_nist_ulaw lossy_comp_test nist_ulaw)
+ add_test (lossy_comp_test_nist_alaw lossy_comp_test nist_alaw)
+ add_test (header_test_nist header_test nist)
+ add_test (misc_test_nist misc_test nist)
+
+ ### ircam-tests
+ add_test (write_read_test_ircam write_read_test ircam)
+ add_test (lossy_comp_test_ircam_ulaw lossy_comp_test ircam_ulaw)
+ add_test (lossy_comp_test_ircam_alaw lossy_comp_test ircam_alaw)
+ add_test (header_test_ircam header_test ircam)
+ add_test (misc_test_ircam misc_test ircam)
-lsf_build_src_test_c (test_main "${src_test_sources}")
-
-# Tests from the tests/ directory.
-
-lsf_build_test_c (aiff_rw_test "")
-lsf_build_test_c (alaw_test "")
-lsf_build_test_c (benchmark "")
-lsf_build_test_c (channel_test "")
-lsf_build_test_c (checksum_test "")
-lsf_build_test_c (chunk_test "")
-lsf_build_test_c (command_test "")
-lsf_build_test_c (compression_size_test "")
-lsf_build_test_cc (cpp_test "")
-lsf_build_test_c (dither_test "")
-lsf_build_test_c (dwvw_test "")
-lsf_build_test_c (error_test "")
-lsf_build_test_c (external_libs_test "")
-lsf_build_test_c (fix_this "")
-lsf_build_test_c (floating_point_test "tests/dft_cmp.c")
-lsf_build_test_c (format_check_test "")
-lsf_build_test_c (headerless_test "")
-lsf_build_test_c (header_test "")
-lsf_build_test_c (largefile_test "")
-lsf_build_test_c (locale_test "")
-lsf_build_test_c (lossy_comp_test "")
-lsf_build_test_c (long_read_write_test "")
-lsf_build_test_c (misc_test "")
-lsf_build_test_c (multi_file_test "")
-lsf_build_test_c (ogg_test "")
-lsf_build_test_c (pcm_test "")
-lsf_build_test_c (peak_chunk_test "")
-lsf_build_test_c (pipe_test "")
-lsf_build_test_c (raw_test "")
-lsf_build_test_c (rdwr_test "")
-lsf_build_test_c (scale_clip_test "")
-lsf_build_test_c (sfversion "")
-lsf_build_test_c (stdin_test "")
-lsf_build_test_c (stdio_test "")
-lsf_build_test_c (stdout_test "")
-lsf_build_test_c (string_test "")
-lsf_build_test_c (ulaw_test "")
-lsf_build_test_c (virtual_io_test "")
-lsf_build_test_c (win32_ordinal_test "")
-lsf_build_test_c (win32_test "")
-lsf_build_test_c (write_read_test "tests/generate.c")
+ ### voc-tests
+ add_test (write_read_test_voc write_read_test voc)
+ add_test (lossy_comp_test_voc_ulaw lossy_comp_test voc_ulaw)
+ add_test (lossy_comp_test_voc_alaw lossy_comp_test voc_alaw)
+ add_test (header_test_voc header_test voc)
+ add_test (misc_test_voc misc_test voc)
+
+ ### mat4-tests
+ add_test (write_read_test_mat4 write_read_test mat4)
+ add_test (header_test_mat4 header_test mat4)
+ add_test (misc_test_mat4 misc_test mat4)
+
+ ### mat5-tests
+ add_test (write_read_test_mat5 write_read_test mat5)
+ add_test (header_test_mat5 header_test mat5)
+ add_test (misc_test_mat5 misc_test mat5)
+
+ ### pvf-tests
+ add_test (write_read_test_pvf write_read_test pvf)
+ add_test (header_test_pvf header_test pvf)
+ add_test (misc_test_pvf misc_test pvf)
+
+ ### xi-tests
+ add_test (lossy_comp_test_xi_dpcm lossy_comp_test xi_dpcm)
+
+ ### htk-tests
+ add_test (write_read_test_htk write_read_test htk)
+ add_test (header_test_htk header_test htk)
+ add_test (misc_test_htk misc_test htk)
+
+ ### avr-tests
+ add_test (write_read_test_avr write_read_test avr)
+ add_test (header_test_avr header_test avr)
+ add_test (misc_test_avr misc_test avr)
+
+ ### sds-tests
+ add_test (write_read_test_sds write_read_test sds)
+ add_test (header_test_sds header_test sds)
+ add_test (misc_test_sds misc_test sds)
+
+ # sd2-tests
+ add_test (write_read_test_sd2 write_read_test sd2)
+
+ ### wve-tests
+ add_test (lossy_comp_test_wve lossy_comp_test wve)
+
+ ### mpc2k-tests
+ add_test (write_read_test_mpc2k write_read_test mpc2k)
+ add_test (header_test_mpc2k header_test mpc2k)
+ add_test (misc_test_mpc2k misc_test mpc2k)
+
+ add_test (string_test_flac string_test flac)
+
+ ### vorbis-tests
+ add_test (ogg_test ogg_test)
+ add_test (compression_size_test_vorbis compression_size_test vorbis)
+ add_test (lossy_comp_test_ogg_vorbis lossy_comp_test ogg_vorbis)
+ add_test (string_test_ogg string_test ogg)
+ add_test (misc_test_ogg misc_test ogg)
+
+ ### opus-tests ###
+ add_test (ogg_opus_test ogg_opus_test)
+ add_test (compression_size_test_opus compression_size_test opus)
+ add_test (lossy_comp_test_ogg_opus lossy_comp_test ogg_opus)
+ add_test (string_test_opus string_test opus)
+
+ ### mpeg-tests ###
+ add_test (mpeg_test mpeg_test)
+ add_test (compression_size_test_mpeg compression_size_test mpeg)
+
+ ### io-tests
+ add_test (stdio_test stdio_test)
+ add_test (pipe_test pipe_test)
+ add_test (virtual_io_test virtual_io_test)
+
+ set (SNDFILE_TEST_TARGETS
+ test_utils
+ test_main
+ sfversion
+ error_test
+ ulaw_test
+ alaw_test
+ dwvw_test
+ command_test
+ floating_point_test
+ checksum_test
+ scale_clip_test
+ headerless_test
+ rdwr_test
+ locale_test
+ cpp_test
+ external_libs_test
+ format_check_test
+ channel_test
+ pcm_test
+ write_read_test
+ lossy_comp_test
+ peak_chunk_test
+ header_test
+ misc_test
+ string_test
+ multi_file_test
+ aiff_rw_test
+ chunk_test
+ long_read_write_test
+ raw_test
+ compression_size_test
+ ogg_test
+ stdin_test
+ stdout_test
+ stdio_test
+ pipe_test
+ virtual_io_test
+ )
+
+# if (WIN32 AND BUILD_SHARED_LIBS)
+# list (APPEND SNDFILE_TEST_TARGETS win32_ordinal_test)
+# endif ()
+
+ set_target_properties(${SNDFILE_TEST_TARGETS} PROPERTIES FOLDER Tests)
+
+endif ()
+
+if (ENABLE_CPACK)
+ if ((NOT CPACK_PACKAGE_VERSION) AND CPACK_PACKAGE_VERSION_STAGE)
+ set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_FULL}")
+ endif ()
+ include (CPack)
+endif ()