Use cmake build
[platform/upstream/libsndfile.git] / CMakeLists.txt
index de98145..f938ddc 100644 (file)
@@ -15,7 +15,27 @@ if (POLICY CMP0091)
        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
@@ -54,7 +74,6 @@ endif ()
 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})
@@ -75,9 +94,16 @@ endif ()
 
 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)
@@ -104,11 +130,12 @@ set (HAVE_ALSA_ASOUNDLIB_H ${ALSA_FOUND})
 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")
@@ -141,11 +168,17 @@ set_package_properties (Vorbis PROPERTIES
        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
@@ -181,8 +214,6 @@ feature_summary (WHAT ALL)
 
 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})
@@ -191,11 +222,15 @@ if (INSTALL_PKGCONFIG_MODULE)
        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)
 
@@ -207,8 +242,8 @@ endif ()
 
 # Public libsndfile headers
 set (sndfile_HDRS
+       include/sndfile.h
        include/sndfile.hh
-       ${CMAKE_CURRENT_BINARY_DIR}/include/sndfile.h
        )
 
 #
@@ -230,7 +265,6 @@ add_library (sndfile
        src/double64.c
        src/ima_adpcm.c
        src/ms_adpcm.c
-       src/gsm610.c
        src/dwvw.c
        src/vox_adpcm.c
        src/interleave.c
@@ -241,22 +275,20 @@ add_library (sndfile
        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
@@ -284,49 +316,12 @@ add_library (sndfile
        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
        )
@@ -345,10 +340,12 @@ target_include_directories (sndfile
 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}"
@@ -368,6 +365,28 @@ 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)
@@ -380,11 +399,23 @@ if (BUILD_SHARED_LIBS)
                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)
@@ -404,7 +435,7 @@ if (BUILD_SHARED_LIBS)
        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}..."
                        )
 
@@ -647,6 +678,11 @@ if (BUILD_EXAMPLES)
                        $<$<BOOL:${LIBM_REQUIRED}>:m>
                )
 
+# generate
+
+       add_executable (generate examples/generate.c)
+       target_link_libraries (generate PRIVATE sndfile)
+
 # sndfilehandle
 
        add_executable (sndfilehandle examples/sndfilehandle.cc)
@@ -658,6 +694,7 @@ if (BUILD_EXAMPLES)
                make_sine
                sfprocess
                list_formats
+               generate
                sndfilehandle
                )
 
@@ -716,6 +753,8 @@ if (ENABLE_PACKAGE_CONFIG)
                PUBLIC_HEADER DESTINATION       ${CMAKE_INSTALL_INCLUDEDIR}
        )
 
+       export (EXPORT SndFileTargets NAMESPACE SndFile:: FILE ${PROJECT_BINARY_DIR}/SndFileTargets.cmake)
+
        include (CMakePackageConfigHelpers)
 
        if (ENABLE_EXTERNAL_LIBS)
@@ -724,8 +763,19 @@ if (ENABLE_PACKAGE_CONFIG)
                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
                )
@@ -736,8 +786,12 @@ if (ENABLE_PACKAGE_CONFIG)
                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}
                )
@@ -1181,6 +1235,14 @@ if (BUILD_TESTING)
                        $<$<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
@@ -1223,27 +1285,11 @@ if (BUILD_TESTING)
                        $<$<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)
@@ -1256,24 +1302,10 @@ if (BUILD_TESTING)
        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)
@@ -1281,8 +1313,6 @@ if (BUILD_TESTING)
        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)
@@ -1298,7 +1328,6 @@ if (BUILD_TESTING)
        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)
 
@@ -1315,7 +1344,6 @@ if (BUILD_TESTING)
        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)
 
@@ -1394,9 +1422,6 @@ if (BUILD_TESTING)
        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
@@ -1412,6 +1437,10 @@ if (BUILD_TESTING)
        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)
@@ -1455,7 +1484,6 @@ if (BUILD_TESTING)
                stdio_test
                pipe_test
                virtual_io_test
-               g72x_test
                )
 
 #      if (WIN32 AND BUILD_SHARED_LIBS)
@@ -1467,5 +1495,8 @@ if (BUILD_TESTING)
 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 ()