endif ()
endif ()
-project(libsndfile VERSION 1.0.31)
+option (ENABLE_EXTERNAL_LIBS "Enable Vorbis, and Opus codecs" ON)
+if (ENABLE_EXTERNAL_LIBS)
+ list (APPEND VCPKG_MANIFEST_FEATURES "external-libs")
+endif ()
+
+option (ENABLE_MPEG "Enable MPEG codecs" ON)
+if (ENABLE_MPEG)
+ list (APPEND VCPKG_MANIFEST_FEATURES "mpeg")
+endif ()
+
+option (ENABLE_EXPERIMENTAL "Enable experimental code" OFF)
+if (ENABLE_EXPERIMENTAL)
+ list (APPEND VCPKG_MANIFEST_FEATURES "speex")
+endif ()
+
+option (BUILD_REGTEST "Build regtest" OFF)
+if (BUILD_REGTEST)
+ list (APPEND VCPKG_MANIFEST_FEATURES "regtest")
+endif ()
+
+project(libsndfile VERSION 1.2.0)
#
# Variables
option (BUILD_PROGRAMS "Build programs" ON)
option (BUILD_EXAMPLES "Build examples" ON)
option (ENABLE_CPACK "Enable CPack support" ON)
-option (ENABLE_EXPERIMENTAL "Enable experimental code" OFF)
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})
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 (BUILD_REGTEST "Build regtest" ON "SQLITE3_FOUND" OFF)
-cmake_dependent_option (ENABLE_EXTERNAL_LIBS "Enable FLAC, Vorbis, and Opus codecs" ON "Vorbis_FOUND;FLAC_FOUND;OPUS_FOUND" OFF)
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 (HAVE_SNDIO_H ${SNDIO_FOUND})
set (ENABLE_EXPERIMENTAL_CODE ${ENABLE_EXPERIMENTAL})
+set (HAVE_MPEG ${ENABLE_MPEG})
set (HAVE_SPEEX ${ENABLE_EXPERIMENTAL})
-set (HAVE_OPUS ${ENABLE_EXPERIMENTAL})
add_feature_info (BUILD_SHARED_LIBS BUILD_SHARED_LIBS "build shared libraries")
-add_feature_info (ENABLE_EXTERNAL_LIBS ENABLE_EXTERNAL_LIBS "enable FLAC, Vorbis, and Opus codecs")
+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")
DESCRIPTION "open source lossy audio codec"
PURPOSE "Enables Vorbis support"
)
-set_package_properties (FLAC PROPERTIES
+set_package_properties (mp3lame PROPERTIES
TYPE RECOMMENDED
- URL "www.xiph.org/flac/"
- DESCRIPTION "Free Lossless Audio Codec Library"
- PURPOSE "Enables FLAC support"
+ 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
configure_file (src/config.h.cmake src/config.h)
-configure_file (include/sndfile.h.in include/sndfile.h)
-
if (INSTALL_PKGCONFIG_MODULE)
set (prefix ${CMAKE_INSTALL_PREFIX})
set (includedir "\$\{prefix\}/${CMAKE_INSTALL_INCLUDEDIR}")
set (VERSION ${PROJECT_VERSION})
if (ENABLE_EXTERNAL_LIBS)
- set (EXTERNAL_XIPH_REQUIRE "flac ogg vorbis vorbisenc opus")
+ 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 ()
configure_file (sndfile.pc.in sndfile.pc @ONLY)
# Public libsndfile headers
set (sndfile_HDRS
+ include/sndfile.h
include/sndfile.hh
- ${CMAKE_CURRENT_BINARY_DIR}/include/sndfile.h
)
#
src/double64.c
src/ima_adpcm.c
src/ms_adpcm.c
- src/gsm610.c
src/dwvw.c
src/vox_adpcm.c
src/interleave.c
src/audio_detect.c
src/ima_oki_adpcm.c
src/ima_oki_adpcm.h
- src/alac.c
src/chunk.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/caf.c
src/dwd.c
src/flac.c
- src/g72x.c
src/htk.c
src/ircam.c
src/macos.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/GSM610/config.h
- src/GSM610/gsm.h
- src/GSM610/gsm610_priv.h
- 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
- src/G72x/g72x.h
- src/G72x/g72x_priv.h
- src/G72x/g721.c
- src/G72x/g723_16.c
- src/G72x/g723_24.c
- src/G72x/g723_40.c
- src/G72x/g72x.c
- src/ALAC/ALACAudioTypes.h
- src/ALAC/ALACBitUtilities.h
- src/ALAC/EndianPortable.h
- src/ALAC/aglib.h
- src/ALAC/dplib.h
- src/ALAC/matrixlib.h
- src/ALAC/alac_codec.h
- src/ALAC/shift.h
- src/ALAC/ALACBitUtilities.c
- src/ALAC/ag_dec.c
- src/ALAC/ag_enc.c
- src/ALAC/dp_dec.c
- src/ALAC/dp_enc.c
- src/ALAC/matrix_dec.c
- src/ALAC/matrix_enc.c
- src/ALAC/alac_decoder.c
- src/ALAC/alac_encoder.c
+ src/mpeg.c
+ src/mpeg_decode.c
+ src/mpeg_l3_encode.c
${sndfile_HDRS}
${CMAKE_CURRENT_BINARY_DIR}/src/config.h
)
target_link_libraries (sndfile
PRIVATE
$<$<BOOL:${LIBM_REQUIRED}>:m>
+ $<$<BOOL:${LIBM_REQUIRED}>:dl>
$<$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>:Vorbis::vorbisenc>
- $<$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>:FLAC::FLAC>
$<$<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}"
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)
target_sources (sndfile PRIVATE ${PROJECT_BINARY_DIR}/src/version-metadata.rc)
endif ()
+
set_target_properties (sndfile PROPERTIES
- SOVERSION ${PROJECT_VERSION_MAJOR}
- VERSION ${PROJECT_VERSION}
+ 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)
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} ${PROJECT_VERSION} > ${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}..."
)
$<$<BOOL:${LIBM_REQUIRED}>:m>
)
+# generate
+
+ add_executable (generate examples/generate.c)
+ target_link_libraries (generate PRIVATE sndfile)
+
# sndfilehandle
add_executable (sndfilehandle examples/sndfilehandle.cc)
make_sine
sfprocess
list_formats
+ generate
sndfilehandle
)
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
+ export (EXPORT SndFileTargets NAMESPACE SndFile:: FILE ${PROJECT_BINARY_DIR}/SndFileTargets.cmake)
+
include (CMakePackageConfigHelpers)
if (ENABLE_EXTERNAL_LIBS)
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
)
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}/SndFileConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/SndFileConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_PACKAGEDIR}
)
$<$<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
$<$<BOOL:${LIBM_REQUIRED}>:m>
)
- ### g72x_test
-
- add_executable (g72x_test src/G72x/g72x_test.c)
- target_include_directories (g72x_test
- PRIVATE
- src
- ${CMAKE_CURRENT_BINARY_DIR}/src
- )
- target_link_libraries (g72x_test
- PRIVATE
- sndfile
- $<$<BOOL:${LIBM_REQUIRED}>:m>
- )
- add_test (g72x_test g72x_test all)
-
### 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 (lossy_comp_test_aiff_gsm610 lossy_comp_test aiff_gsm610)
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 (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 (lossy_comp_test_au_g721 lossy_comp_test au_g721)
- add_test (lossy_comp_test_au_g723 lossy_comp_test au_g723)
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)
- ### caf-tests
-
- add_test (write_read_test_caf write_read_test caf)
- add_test (lossy_comp_test_caf_ulaw lossy_comp_test caf_ulaw)
- add_test (lossy_comp_test_caf_alaw lossy_comp_test caf_alaw)
- add_test (header_test_caf header_test caf)
- add_test (peak_chunk_test_caf peak_chunk_test caf)
- add_test (misc_test_caf misc_test caf)
- add_test (chunk_test_caf chunk_test caf)
- add_test (string_test_caf string_test caf)
- add_test (long_read_write_test_alac long_read_write_test alac)
-
# 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_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_gsm610 lossy_comp_test wav_gsm610)
- add_test (lossy_comp_test_wav_g721 lossy_comp_test wav_g721)
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 (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 (lossy_comp_test_w64_gsm610 lossy_comp_test w64_gsm610)
add_test (header_test_w64 header_test w64)
add_test (misc_test_w64 misc_test w64)
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_raw_gsm610 lossy_comp_test raw_gsm610)
add_test (lossy_comp_test_vox_adpcm lossy_comp_test vox_adpcm)
add_test (raw_test raw_test)
add_test (header_test_mpc2k header_test mpc2k)
add_test (misc_test_mpc2k misc_test mpc2k)
- ### flac-tests
- add_test (write_read_test_flac write_read_test flac)
- add_test (compression_size_test_flac compression_size_test flac)
add_test (string_test_flac string_test flac)
### vorbis-tests
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)
stdio_test
pipe_test
virtual_io_test
- g72x_test
)
# if (WIN32 AND BUILD_SHARED_LIBS)
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 ()