Imported Upstream version 1.1.0
[platform/upstream/libsndfile.git] / CMakeLists.txt
1 cmake_minimum_required (VERSION 3.1..3.18)
2
3 # MSVC runtime library flags are selected by an abstraction, CMake >= 3.15
4 # This policy still need to be set even with cmake_minimum_required() command above.
5 if (POLICY CMP0091)
6         if ((DEFINED ENABLE_STATIC_RUNTIME) AND (DEFINED CMAKE_MSVC_RUNTIME_LIBRARY))
7                 message (FATAL_ERROR "Both ENABLE_STATIC_RUNTIME and CMAKE_MSVC_RUNTIME_LIBRARY are set.")
8                 return ()
9         endif ()
10
11         if (DEFINED CMAKE_MSVC_RUNTIME_LIBRARY)
12                 cmake_policy (SET CMP0091 NEW)
13         else ()
14                 cmake_policy (SET CMP0091 OLD)
15         endif ()
16 endif ()
17
18 option (ENABLE_EXTERNAL_LIBS "Enable FLAC, Vorbis, and Opus codecs" ON)
19 if (ENABLE_EXTERNAL_LIBS)
20         list (APPEND VCPKG_MANIFEST_FEATURES "external-libs")
21 endif ()
22
23 option (ENABLE_MPEG "Enable MPEG codecs" ON)
24 if (ENABLE_MPEG)
25         list (APPEND VCPKG_MANIFEST_FEATURES "mpeg")
26 endif ()
27
28 option (ENABLE_EXPERIMENTAL "Enable experimental code" OFF)
29 if (ENABLE_EXPERIMENTAL)
30         list (APPEND VCPKG_MANIFEST_FEATURES "speex")
31 endif ()
32
33 option (BUILD_REGTEST "Build regtest" OFF)
34 if (BUILD_REGTEST)
35         list (APPEND VCPKG_MANIFEST_FEATURES "regtest")
36 endif ()
37
38 project(libsndfile VERSION 1.1.0)
39
40 #
41 # Variables
42 #
43
44 set (CMAKE_C_STANDARD 99)
45 set (CMAKE_C_STANDARD_REQUIRED TRUE)
46 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
47
48 set (PACKAGE_NAME ${PROJECT_NAME})
49 set (CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
50 set (CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
51 set (CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
52 set (CPACK_PACKAGE_VERSION_STAGE "")
53 set (CPACK_PACKAGE_VERSION_FULL "${PROJECT_VERSION}${CPACK_PACKAGE_VERSION_STAGE}")
54
55 #
56 # System-wide includes
57 #
58
59 include (GNUInstallDirs)
60 include (FeatureSummary)
61 include (CMakeDependentOption)
62 include (CTest)
63 include (CheckCCompilerFlag)
64
65 #
66 # Options
67 #
68
69 option (BUILD_SHARED_LIBS "Build shared libraries" OFF)
70 if (BUILD_SHARED_LIBS AND BUILD_TESTING)
71         set (BUILD_TESTING OFF)
72         message ("Build testing required static libraries. To prevent build errors BUILD_TESTING disabled.")
73 endif ()
74 option (BUILD_PROGRAMS "Build programs" ON)
75 option (BUILD_EXAMPLES "Build examples" ON)
76 option (ENABLE_CPACK "Enable CPack support" ON)
77 option (ENABLE_BOW_DOCS "Enable black-on-white html docs" OFF)
78 if (MSVC AND (DEFINED ENABLE_STATIC_RUNTIME))
79         option (ENABLE_STATIC_RUNTIME "Enable static runtime" ${ENABLE_STATIC_RUNTIME})
80 elseif (MINGW)
81         option (ENABLE_STATIC_RUNTIME "Enable static runtime" OFF)
82 endif ()
83 option (ENABLE_PACKAGE_CONFIG "Generate and install package config file" ON)
84 option (INSTALL_PKGCONFIG_MODULE "Generate and install pkg-config module" ON)
85
86 list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
87 if (CMAKE_VERSION VERSION_LESS 3.14)
88         list (APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/sqlite")
89 endif ()
90
91 #
92 # Setup definitions
93 #
94
95 include(SndFileChecks)
96
97 if (ENABLE_EXTERNAL_LIBS AND NOT (Vorbis_FOUND OR FLAC_FOUND OR OPUS_FOUND))
98         set (ENABLE_EXTERNAL_LIBS OFF)
99 endif()
100 if(ENABLE_MPEG AND (NOT HAVE_MPEG_LIBS))
101         set (ENABLE_MPEG OFF)
102 endif()
103 if (BUILD_REGTEST AND (NOT SQLITE3_FOUND))
104         set (BUILD_REGTEST OFF)
105 endif()
106
107 cmake_dependent_option (ENABLE_CPU_CLIP "Enable tricky cpu specific clipper" ON "CPU_CLIPS_POSITIVE;CPU_CLIPS_NEGATIVE" OFF)
108 if (NOT ENABLE_CPU_CLIP)
109         set (CPU_CLIPS_POSITIVE FALSE)
110         set (CPU_CLIPS_NEGATIVE FALSE)
111 endif ()
112 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)
113 cmake_dependent_option (INSTALL_MANPAGES "Install man pages for programs" ON "BUILD_PROGRAMS" OFF)
114
115 if (NOT MSVC)
116         if (CPU_IS_X86)
117                 check_c_compiler_flag (-msse2 HAVE_MSSE2_COMPILER_FLAG)
118                 if (HAVE_MSSE2_COMPILER_FLAG)
119                         cmake_dependent_option (ENABLE_SSE2 "Add SSE2 compiler flag" ON "HAVE_MSSE2_COMPILER_FLAG" OFF)
120                 endif ()
121         endif ()
122 endif ()
123 if (ENABLE_SSE2)
124         add_compile_options (-msse2)
125 endif ()
126
127 set (HAVE_EXTERNAL_XIPH_LIBS ${ENABLE_EXTERNAL_LIBS})
128 set (HAVE_SQLITE3 ${BUILD_REGTEST})
129 set (HAVE_ALSA_ASOUNDLIB_H ${ALSA_FOUND})
130 set (HAVE_SNDIO_H ${SNDIO_FOUND})
131
132 set (ENABLE_EXPERIMENTAL_CODE ${ENABLE_EXPERIMENTAL})
133 set (HAVE_MPEG ${ENABLE_MPEG})
134 set (HAVE_SPEEX ${ENABLE_EXPERIMENTAL})
135
136 add_feature_info (BUILD_SHARED_LIBS BUILD_SHARED_LIBS "build shared libraries")
137 add_feature_info (ENABLE_EXTERNAL_LIBS ENABLE_EXTERNAL_LIBS "enable FLAC, Vorbis, and Opus codecs")
138 add_feature_info (ENABLE_MPEG ENABLE_MPEG "enable MPEG audio (including mp3) codecs")
139 add_feature_info (ENABLE_EXPERIMENTAL ENABLE_EXPERIMENTAL "enable experimental code")
140 add_feature_info (BUILD_TESTING BUILD_TESTING "build tests")
141 add_feature_info (BUILD_REGTEST BUILD_REGTEST "build regtest")
142 add_feature_info (ENABLE_CPACK ENABLE_CPACK "enable CPack support")
143 add_feature_info (ENABLE_CPU_CLIP ENABLE_CPU_CLIP "Enable tricky cpu specific clipper")
144 add_feature_info (ENABLE_BOW_DOCS ENABLE_BOW_DOCS "enable black-on-white html docs")
145 add_feature_info (ENABLE_PACKAGE_CONFIG ENABLE_PACKAGE_CONFIG "generate and install package config file")
146 add_feature_info (INSTALL_PKGCONFIG_MODULE INSTALL_PKGCONFIG_MODULE "generate and install pkg-config module")
147 add_feature_info (INSTALL_MANPAGES INSTALL_MANPAGES "install man pages for programs")
148 if (WIN32 AND BUILD_SHARED_LIBS)
149         add_feature_info (ENABLE_COMPATIBLE_LIBSNDFILE_NAME ENABLE_COMPATIBLE_LIBSNDFILE_NAME "Set DLL name to libsndfile-1.dll (canonical name), sndfile.dll otherwise")
150 endif ()
151
152 if (HAVE_MSSE2_COMPILER_FLAG)
153         add_feature_info (ENABLE_SSE2 ENABLE_SSE2 "add SSE2 compiler flag")
154 endif ()
155
156
157
158
159 set_package_properties (Ogg PROPERTIES
160         TYPE RECOMMENDED
161         URL "www.xiph.org/ogg/"
162         DESCRIPTION "library for manipulating ogg bitstreams"
163         PURPOSE "Required to enable Vorbis, Speex, and Opus support"
164         )
165 set_package_properties (Vorbis PROPERTIES
166         TYPE RECOMMENDED
167         URL "www.vorbis.com/"
168         DESCRIPTION "open source lossy audio codec"
169         PURPOSE "Enables Vorbis support"
170         )
171 set_package_properties (FLAC PROPERTIES
172         TYPE RECOMMENDED
173         URL "www.xiph.org/flac/"
174         DESCRIPTION "Free Lossless Audio Codec Library"
175         PURPOSE "Enables FLAC support"
176         )
177 set_package_properties (Lame PROPERTIES
178         TYPE RECOMMENDED
179         URL "https://lame.sourceforge.io/"
180         DESCRIPTION "High quality MPEG Audio Layer III (MP3) encoder"
181         PURPOSE "Enables MPEG layer III (MP3) writing support"
182         )
183 set_package_properties (MPG123 PROPERTIES
184         TYPE RECOMMENDED
185         URL "https://www.mpg123.de/"
186         DESCRIPTION "MPEG Audio Layer I/II/III decoder"
187         PURPOSE "Enables MPEG Audio reading support"
188         )
189 set_package_properties(Opus PROPERTIES
190         TYPE RECOMMENDED
191         URL     "www.opus-codec.org/"
192         DESCRIPTION "Standardized open source low-latency fullband codec"
193         PURPOSE "Enables experimental Opus support"
194         )
195 set_package_properties(Speex PROPERTIES TYPE OPTIONAL
196         URL "www.speex.org/"
197         DESCRIPTION "an audio codec tuned for speech"
198         PURPOSE "Enables experemental Speex support"
199         )
200 set_package_properties (SQLite3 PROPERTIES
201         TYPE OPTIONAL
202         URL "www.sqlite.org/"
203         DESCRIPTION "light weight SQL database engine."
204         PURPOSE "Enables regtest"
205         )
206 if (BUILD_SHARED_LIBS)
207         set_package_properties (PythonInterp PROPERTIES
208                 TYPE REQUIRED
209                 URL "www.python.org/"
210                 DESCRIPTION "Python is a widely used high-level programming language."
211                 PURPOSE "Required to build shared libraries"
212                 )
213 endif()
214
215 feature_summary (WHAT ALL)
216
217 #
218 # Setup configuration
219 #
220
221 configure_file (src/config.h.cmake src/config.h)
222
223 configure_file (include/sndfile.h.in include/sndfile.h)
224
225 if (INSTALL_PKGCONFIG_MODULE)
226
227         set (prefix ${CMAKE_INSTALL_PREFIX})
228         set (exec_prefix "\$\{prefix\}")
229         set (libdir "\$\{prefix\}/${CMAKE_INSTALL_LIBDIR}")
230         set (includedir "\$\{prefix\}/${CMAKE_INSTALL_INCLUDEDIR}")
231         set (VERSION ${PROJECT_VERSION})
232         if (ENABLE_EXTERNAL_LIBS)
233                 set (EXTERNAL_XIPH_REQUIRE "flac ogg vorbis vorbisenc opus")
234                 if (ENABLE_EXPERIMENTAL)
235                         set (EXTERNAL_XIPH_REQUIRE "${EXTERNAL_XIPH_REQUIRE} speex")
236                 endif ()
237         endif ()
238         if (ENABLE_MPEG)
239                 set (EXTERNAL_MPEG_REQUIRE "libmpg123")
240                 get_filename_component(LAME_WE ${LAME_LIBRARY} NAME_WE)
241                 if (LAME_HIP_LIBRARY)
242                         get_filename_component(LAME_HIP_WE ${LAME_HIP_LIBRARY} NAME_WE)
243                 endif ()
244                 if (CMAKE_IMPORT_LIBRARY_PREFIX)
245                         string (REGEX REPLACE "^${CMAKE_IMPORT_LIBRARY_PREFIX}" "" LAME_WE_NO_PREFIX ${LAME_WE})
246                         if (LAME_HIP_LIBRARY)
247                                 string (REGEX REPLACE "^${CMAKE_IMPORT_LIBRARY_PREFIX}" "" LAME_HIP_WE_NO_PREFIX ${LAME_HIP_WE})
248                         endif ()
249                 endif ()
250                 set (EXTERNAL_MPEG_LIBS "-l${LAME_WE_NO_PREFIX}")
251                 if (LAME_HIP_LIBRARY)
252                         set (EXTERNAL_MPEG_LIBS "${MPEG_LIBS} -l${LAME_HIP_WE}")
253                 endif ()
254         endif ()
255
256         configure_file (sndfile.pc.in sndfile.pc @ONLY)
257
258 endif ()
259
260 #
261 # libsndfile
262 #
263
264 # Public libsndfile headers
265 set (sndfile_HDRS
266         include/sndfile.hh
267         ${CMAKE_CURRENT_BINARY_DIR}/include/sndfile.h
268         )
269
270 #
271 # libsndfile static library
272 #
273
274 add_library (sndfile
275         src/sfconfig.h
276         src/sfendian.h
277         src/sf_unistd.h
278         src/common.h
279         src/common.c
280         src/file_io.c
281         src/command.c
282         src/pcm.c
283         src/ulaw.c
284         src/alaw.c
285         src/float32.c
286         src/double64.c
287         src/ima_adpcm.c
288         src/ms_adpcm.c
289         src/gsm610.c
290         src/dwvw.c
291         src/vox_adpcm.c
292         src/interleave.c
293         src/strings.c
294         src/dither.c
295         src/cart.c
296         src/broadcast.c
297         src/audio_detect.c
298         src/ima_oki_adpcm.c
299         src/ima_oki_adpcm.h
300         src/alac.c
301         src/chunk.c
302         src/ogg.h
303         src/ogg.c
304         src/chanmap.h
305         src/chanmap.c
306         src/id3.h
307         src/id3.c
308         $<$<BOOL:${WIN32}>:src/windows.c>
309         src/sndfile.c
310         src/aiff.c
311         src/au.c
312         src/avr.c
313         src/caf.c
314         src/dwd.c
315         src/flac.c
316         src/g72x.c
317         src/htk.c
318         src/ircam.c
319         src/macos.c
320         src/mat4.c
321         src/mat5.c
322         src/nist.c
323         src/paf.c
324         src/pvf.c
325         src/raw.c
326         src/rx2.c
327         src/sd2.c
328         src/sds.c
329         src/svx.c
330         src/txw.c
331         src/voc.c
332         src/wve.c
333         src/w64.c
334         src/wavlike.h
335         src/wavlike.c
336         src/wav.c
337         src/xi.c
338         src/mpc2k.c
339         src/rf64.c
340         src/ogg_vorbis.c
341         src/ogg_speex.c
342         src/ogg_pcm.c
343         src/ogg_opus.c
344         src/ogg_vcomment.h
345         src/ogg_vcomment.c
346         src/nms_adpcm.c
347         src/mpeg.c
348         src/mpeg_decode.c
349         src/mpeg_l3_encode.c
350         src/GSM610/config.h
351         src/GSM610/gsm.h
352         src/GSM610/gsm610_priv.h
353         src/GSM610/add.c
354         src/GSM610/code.c
355         src/GSM610/decode.c
356         src/GSM610/gsm_create.c
357         src/GSM610/gsm_decode.c
358         src/GSM610/gsm_destroy.c
359         src/GSM610/gsm_encode.c
360         src/GSM610/gsm_option.c
361         src/GSM610/long_term.c
362         src/GSM610/lpc.c
363         src/GSM610/preprocess.c
364         src/GSM610/rpe.c
365         src/GSM610/short_term.c
366         src/GSM610/table.c
367         src/G72x/g72x.h
368         src/G72x/g72x_priv.h
369         src/G72x/g721.c
370         src/G72x/g723_16.c
371         src/G72x/g723_24.c
372         src/G72x/g723_40.c
373         src/G72x/g72x.c
374         src/ALAC/ALACAudioTypes.h
375         src/ALAC/ALACBitUtilities.h
376         src/ALAC/EndianPortable.h
377         src/ALAC/aglib.h
378         src/ALAC/dplib.h
379         src/ALAC/matrixlib.h
380         src/ALAC/alac_codec.h
381         src/ALAC/shift.h
382         src/ALAC/ALACBitUtilities.c
383         src/ALAC/ag_dec.c
384         src/ALAC/ag_enc.c
385         src/ALAC/dp_dec.c
386         src/ALAC/dp_enc.c
387         src/ALAC/matrix_dec.c
388         src/ALAC/matrix_enc.c
389         src/ALAC/alac_decoder.c
390         src/ALAC/alac_encoder.c
391         ${sndfile_HDRS}
392         ${CMAKE_CURRENT_BINARY_DIR}/src/config.h
393         )
394
395 add_library (SndFile::sndfile ALIAS sndfile)
396
397 target_include_directories (sndfile
398         PUBLIC
399                 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
400                 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
401                 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
402         PRIVATE
403                 src
404                 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/src>
405         )
406 target_link_libraries (sndfile
407         PRIVATE
408                 $<$<BOOL:${LIBM_REQUIRED}>:m>
409                 $<$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>:Vorbis::vorbisenc>
410                 $<$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>:FLAC::FLAC>
411                 $<$<AND:$<BOOL:${ENABLE_EXPERIMENTAL}>,$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>,$<BOOL:${HAVE_SPEEX}>>:Speex::Speex>
412                 $<$<BOOL:${HAVE_EXTERNAL_XIPH_LIBS}>:Opus::opus>
413                 $<$<BOOL:${HAVE_MPEG}>:MPG123::libmpg123>
414                 $<$<BOOL:${HAVE_MPEG}>:Lame::Lame>
415         )
416 set_target_properties (sndfile PROPERTIES
417         PUBLIC_HEADER "${sndfile_HDRS}"
418         )
419
420 if (ENABLE_COMPATIBLE_LIBSNDFILE_NAME)
421         if (MINGW OR CYGWIN)
422                 set_target_properties (sndfile PROPERTIES
423                         RUNTIME_OUTPUT_NAME "sndfile-1"
424                         )
425         else ()
426                 set_target_properties (sndfile PROPERTIES
427                         RUNTIME_OUTPUT_NAME "libsndfile-1"
428                         )
429         endif ()
430 endif ()
431
432 if (BUILD_SHARED_LIBS)
433
434         #
435         # ABI version of library.
436         #
437
438         #
439         # Read libtool version from `configure.ac` and set libsndfile ABI version:
440         #
441         #   SNDFILE_ABI_VERSION_MAJOR
442         #   SNDFILE_ABI_VERSION_MINOR
443         #   SNDFILE_ABI_VERSION_PATCH
444         #   SNDFILE_ABI_VERSION
445         #
446         # and Mach-O current and compatibility versions:
447         #
448         #   SNDFILE_MACHO_CURRENT_VERSION
449         #   SNDFILE_MACHO_COMPATIBILITY_VERSION
450         #
451
452         include (SetupABIVersions)
453
454         setup_abi_versions()
455
456         if (WIN32)
457                 set (VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR})
458                 set (GEN_TOOL cmake)
459                 
460                 set (WIN_RC_VERSION "${CPACK_PACKAGE_VERSION_MAJOR},${CPACK_PACKAGE_VERSION_MINOR},${CPACK_PACKAGE_VERSION_PATCH}")
461                 set (CLEAN_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
462                 set (PACKAGE_VERSION ${CPACK_PACKAGE_VERSION})
463
464                 configure_file (src/version-metadata.rc.in src/version-metadata.rc @ONLY)
465                 target_sources (sndfile PRIVATE ${PROJECT_BINARY_DIR}/src/version-metadata.rc)
466         endif ()
467
468
469         set_target_properties (sndfile PROPERTIES
470                 SOVERSION ${SNDFILE_ABI_VERSION_MAJOR}
471                 VERSION ${SNDFILE_ABI_VERSION}
472                 )
473
474         if (APPLE)
475                 if (NOT (CMAKE_VERSION VERSION_LESS 3.17))
476                         set_target_properties (sndfile PROPERTIES
477                                 MACHO_CURRENT_VERSION ${SNDFILE_MACHO_CURRENT_VERSION}
478                                 MACHO_COMPATIBILITY_VERSION ${SNDFILE_MACHO_COMPATIBILITY_VERSION}
479                                 )
480                 else ()
481                         message (FATAL_ERROR "Apple platform requires cmake >= 3.17 to build dylib.")
482                 endif ()
483         endif ()
484
485         # Symbol files generation
486
487         if (WIN32)
488                 set (SYMBOL_FILENAME "sndfile.def")
489                 set (SYMBOL_OS "win32")
490         elseif ((CMAKE_SYSTEM_NAME MATCHES "Darwin") OR (CMAKE_SYSTEM_NAME MATCHES "Rhapsody"))
491                 set (SYMBOL_FILENAME "Symbols.darwin")
492                 set (SYMBOL_OS "darwin")
493         elseif (CMAKE_SYSTEM_NAME MATCHES "OS2")
494                 set (SYMBOL_FILENAME "Symbols.os2")
495                 set (SYMBOL_OS "os2")
496         elseif (UNIX)
497                 set (SYMBOL_FILENAME "Symbols.gnu-binutils")
498                 set (SYMBOL_OS "linux")
499         endif ()
500
501         if (DEFINED SYMBOL_OS)
502                 add_custom_command (
503                         OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}
504                         COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/src/create_symbols_file.py ${SYMBOL_OS} ${SNDFILE_ABI_VERSION} > ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}
505                         COMMENT "Generating ${SYMBOL_FILENAME}..."
506                         )
507
508                 add_custom_target (GENFILES DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME})
509                 if (SYMBOL_OS MATCHES "win32")
510                         target_sources (sndfile
511                                 PRIVATE
512                                         ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}
513                                 )
514                 elseif (SYMBOL_OS MATCHES "darwin")
515                         add_dependencies (sndfile GENFILES)
516                         if (CMAKE_VERSION VERSION_LESS 3.13)
517                                 set_property (TARGET sndfile APPEND_STRING PROPERTY
518                                         LINK_FLAGS "-Wl,-exported_symbols_list -Wl,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}"
519                                         )
520                         else ()
521                                 target_link_options (sndfile PRIVATE "LINKER:-exported_symbols_list,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}")
522                         endif()
523                 elseif (SYMBOL_OS MATCHES "os")
524                         add_dependencies (sndfile GENFILES)
525                         if (CMAKE_VERSION VERSION_LESS 3.13)
526                                 set_property (TARGET sndfile APPEND_STRING PROPERTY
527                                         LINK_FLAGS "-Wl,-export-symbols ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}"
528                                         )
529                         else ()
530                                 target_link_options (sndfile PRIVATE "LINKER:-export-symbols ${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}")
531                         endif()
532                 elseif (UNIX)
533                         add_dependencies (sndfile GENFILES)
534                         if (CMAKE_VERSION VERSION_LESS 3.13)
535                                 set_property (TARGET sndfile APPEND_STRING PROPERTY
536                                         LINK_FLAGS "-Wl,--version-script,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}"
537                                         )
538                         else ()
539                                 target_link_options (sndfile PRIVATE "LINKER:--version-script,${CMAKE_CURRENT_BINARY_DIR}/src/${SYMBOL_FILENAME}")
540                         endif()
541                 endif()
542         endif()
543
544 endif ()
545
546 #
547 # Programs
548 #
549
550 if (BUILD_PROGRAMS)
551
552 # sndfile-info
553
554         add_executable (sndfile-info
555                 programs/sndfile-info.c
556                 programs/common.c
557                 programs/common.h
558                 )
559         target_link_libraries (sndfile-info
560                 PRIVATE
561                         sndfile
562                         $<$<BOOL:${LIBM_REQUIRED}>:m>
563                 )
564
565 # sndfile-play
566
567         add_executable (sndfile-play
568                 $<$<NOT:$<BOOL:${BEOS}>>:programs/sndfile-play.c>
569                 $<$<NOT:$<BOOL:${BEOS}>>:programs/common.c>
570                 $<$<NOT:$<BOOL:${BEOS}>>:programs/sndfile-play.c>
571                 $<$<BOOL:${BEOS}>:programs/sndfile-play-beos.cpp>
572                 )
573         target_include_directories (sndfile-play
574                 PRIVATE
575                         src
576                         ${CMAKE_CURRENT_BINARY_DIR}/src
577                 )
578         target_link_libraries (sndfile-play PRIVATE $<$<BOOL:${LIBM_REQUIRED}>:m>)
579         target_link_libraries (sndfile-play PRIVATE sndfile)
580         if (WIN32)
581                 target_link_libraries(sndfile-play PRIVATE winmm)
582         # Maybe ALSA & Sndio are present in BeOS. They are not required
583         # so skip them anyway.
584         elseif ((NOT BEOS) AND ALSA_FOUND)
585                 target_include_directories (sndfile-play PRIVATE ${ALSA_INCLUDE_DIRS})
586                 target_link_libraries (sndfile-play PRIVATE ${ALSA_LIBRARIES})
587         elseif (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
588                 target_link_libraries (sndfile-play PRIVATE Sndio::Sndio)
589         endif ()
590
591 # sndfile-convert
592
593         add_executable (sndfile-convert
594                 programs/sndfile-convert.c
595                 programs/common.c
596                 programs/common.h
597                 )
598         target_link_libraries (sndfile-convert PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
599
600 # sndfile-cmp
601
602         add_executable (sndfile-cmp
603                 programs/sndfile-cmp.c
604                 programs/common.c
605                 programs/common.h
606                 )
607         target_include_directories (sndfile-cmp
608                 PUBLIC
609                         src
610                         ${CMAKE_CURRENT_BINARY_DIR}/src
611                         ${CMAKE_CURRENT_BINARY_DIR}/tests
612                 )
613         target_link_libraries (sndfile-cmp PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
614
615 # sndfile-metadata-set
616
617         add_executable (sndfile-metadata-set
618                 programs/sndfile-metadata-set.c
619                 programs/common.c
620                 programs/common.h
621                 )
622         target_include_directories (sndfile-metadata-set
623                 PUBLIC
624                         src
625                         ${CMAKE_CURRENT_BINARY_DIR}/src
626                         ${CMAKE_CURRENT_BINARY_DIR}/tests
627                 )
628         target_link_libraries (sndfile-metadata-set PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
629
630 # sndfile-metadata-get
631
632         add_executable (sndfile-metadata-get
633                 programs/sndfile-metadata-get.c
634                 programs/common.c
635                 programs/common.h
636                 )
637         target_include_directories (sndfile-metadata-get
638                 PUBLIC
639                         src
640                         ${CMAKE_CURRENT_BINARY_DIR}/src
641                         ${CMAKE_CURRENT_BINARY_DIR}/tests
642                 )
643         target_link_libraries (sndfile-metadata-get PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
644
645 # sndfile-interleave
646
647         add_executable (sndfile-interleave
648                 programs/sndfile-interleave.c
649                 programs/common.c
650                 programs/common.h
651                 )
652         target_link_libraries (sndfile-interleave PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
653
654 # sndfile-deinterleave
655
656         add_executable (sndfile-deinterleave
657                 programs/sndfile-deinterleave.c
658                 programs/common.c
659                 programs/common.h
660                 )
661         target_link_libraries (sndfile-deinterleave PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
662
663 # sndfile-concat
664
665         add_executable (sndfile-concat
666                 programs/sndfile-concat.c
667                 programs/common.c
668                 programs/common.h
669                 )
670         target_link_libraries (sndfile-concat PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
671
672 # sndfile-salvage
673
674         add_executable (sndfile-salvage
675                 programs/sndfile-salvage.c
676                 programs/common.c
677                 programs/common.h
678                 )
679         target_include_directories (sndfile-salvage
680                 PUBLIC
681                         src
682                         ${CMAKE_CURRENT_BINARY_DIR}/src
683                         ${CMAKE_CURRENT_BINARY_DIR}/tests
684                 )
685         target_link_libraries (sndfile-salvage PRIVATE sndfile $<$<BOOL:${LIBM_REQUIRED}>:m>)
686
687         set (SNDFILE_PROGRAM_TARGETS
688                 sndfile-info
689                 sndfile-play
690                 sndfile-convert
691                 sndfile-cmp
692                 sndfile-metadata-set
693                 sndfile-metadata-get
694                 sndfile-interleave
695                 sndfile-deinterleave
696                 sndfile-concat
697                 sndfile-salvage
698                 )
699
700         set_target_properties(${SNDFILE_PROGRAM_TARGETS} PROPERTIES FOLDER Programs)
701
702 endif ()
703
704 #
705 # Examples
706 #
707
708 if (BUILD_EXAMPLES)
709
710 # sndfile-to-text
711
712         add_executable (sndfile-to-text examples/sndfile-to-text.c)
713         target_link_libraries (sndfile-to-text PRIVATE sndfile)
714
715 # sndfile-loopify
716
717         add_executable (sndfile-loopify examples/sndfile-loopify.c)
718         target_link_libraries (sndfile-loopify PRIVATE sndfile)
719
720 # make_sine
721
722         add_executable (make_sine examples/make_sine.c)
723         target_link_libraries (make_sine
724                 PRIVATE
725                         sndfile
726                         $<$<BOOL:${LIBM_REQUIRED}>:m>
727                 )
728
729 # sfprocess
730
731         add_executable (sfprocess examples/sfprocess.c)
732         target_link_libraries (sfprocess
733                 PRIVATE
734                         sndfile
735                         $<$<BOOL:${LIBM_REQUIRED}>:m>
736                 )
737
738 # list_formats
739
740         add_executable (list_formats examples/list_formats.c)
741         target_link_libraries (list_formats
742                 PRIVATE
743                         sndfile
744                         $<$<BOOL:${LIBM_REQUIRED}>:m>
745                 )
746
747 # generate
748
749         add_executable (generate examples/generate.c)
750         target_link_libraries (generate PRIVATE sndfile)
751
752 # sndfilehandle
753
754         add_executable (sndfilehandle examples/sndfilehandle.cc)
755         target_link_libraries (sndfilehandle PUBLIC sndfile)
756
757         set (SNDFILE_EXAMPLE_TARGETS
758                 sndfile-to-text
759                 sndfile-loopify
760                 make_sine
761                 sfprocess
762                 list_formats
763                 generate
764                 sndfilehandle
765                 )
766
767         set_target_properties(${SNDFILE_EXAMPLE_TARGETS} PROPERTIES FOLDER Examples)
768
769
770 endif ()
771
772 #
773 # sndfile-regtest
774 #
775
776 if (BUILD_REGTEST)
777
778         add_executable (sndfile-regtest
779                 regtest/sndfile-regtest.c
780                 regtest/database.c
781                 regtest/checksum.c
782                 )
783         target_include_directories (sndfile-regtest
784                 PUBLIC
785                         src
786                         ${CMAKE_CURRENT_BINARY_DIR}/src
787                         ${CMAKE_CURRENT_BINARY_DIR}/tests
788                 )
789         target_link_libraries(sndfile-regtest
790                 PRIVATE
791                         sndfile
792                         SQLite::SQLite3
793                         $<$<BOOL:${LIBM_REQUIRED}>:m>
794                 )
795
796 endif ()
797
798 #
799 # Installation
800 #
801
802 if (ENABLE_PACKAGE_CONFIG)
803
804         if (WIN32 AND (NOT MINGW) AND (NOT CYGWIN))
805                 set (CMAKE_INSTALL_PACKAGEDIR cmake) 
806          else ()
807                 set (CMAKE_INSTALL_PACKAGEDIR ${CMAKE_INSTALL_LIBDIR}/cmake/SndFile)
808          endif()
809
810          install (TARGETS ${SNDFILE_PROGRAM_TARGETS}
811                 RUNTIME DESTINATION                     ${CMAKE_INSTALL_BINDIR}
812         )
813
814         install (TARGETS sndfile
815                 EXPORT SndFileTargets
816                 RUNTIME DESTINATION                     ${CMAKE_INSTALL_BINDIR}
817                 ARCHIVE DESTINATION                     ${CMAKE_INSTALL_LIBDIR}
818                 LIBRARY DESTINATION                     ${CMAKE_INSTALL_LIBDIR}
819                 PUBLIC_HEADER DESTINATION       ${CMAKE_INSTALL_INCLUDEDIR}
820         )
821
822         export (EXPORT SndFileTargets NAMESPACE SndFile:: FILE ${PROJECT_BINARY_DIR}/SndFileTargets.cmake)
823
824         include (CMakePackageConfigHelpers)
825
826         if (ENABLE_EXTERNAL_LIBS)
827                 set (SndFile_WITH_EXTERNAL_LIBS 1)
828         else ()
829                 set (SndFile_WITH_EXTERNAL_LIBS 0)
830         endif ()
831
832         if(ENABLE_MPEG)
833                 set (SndFile_WITH_MPEG 1)
834         else ()
835                 set (SndFile_WITH_MPEG 0)
836         endif ()
837
838         set (INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR})
839         configure_package_config_file(cmake/SndFileConfig.cmake.in SndFileConfig.cmake
840                 INSTALL_DESTINATION ${PROJECT_BINARY_DIR}
841                 INSTALL_PREFIX ${PROJECT_BINARY_DIR}
842                 PATH_VARS INCLUDE_INSTALL_DIR
843                 )
844         configure_package_config_file(cmake/SndFileConfig.cmake.in SndFileConfig2.cmake
845                 INSTALL_DESTINATION ${CMAKE_INSTALL_PACKAGEDIR}
846                 PATH_VARS INCLUDE_INSTALL_DIR
847                 )
848         write_basic_package_version_file (SndFileConfigVersion.cmake COMPATIBILITY SameMajorVersion)
849
850         install(EXPORT SndFileTargets
851                 NAMESPACE SndFile::
852                 DESTINATION ${CMAKE_INSTALL_PACKAGEDIR}
853                 )
854         install(
855                 FILES ${CMAKE_CURRENT_BINARY_DIR}/SndFileConfig2.cmake
856                 RENAME SndFileConfig.cmake
857                 DESTINATION     ${CMAKE_INSTALL_PACKAGEDIR}
858                 )
859         install(
860                 FILES
861                         ${CMAKE_CURRENT_BINARY_DIR}/SndFileConfigVersion.cmake
862                 DESTINATION     ${CMAKE_INSTALL_PACKAGEDIR}
863                 )
864
865 else ()
866
867         install (TARGETS sndfile ${sdnfile_PROGRAMS}
868                 RUNTIME DESTINATION                     ${CMAKE_INSTALL_BINDIR}
869                 ARCHIVE DESTINATION                     ${CMAKE_INSTALL_LIBDIR}
870                 LIBRARY DESTINATION                     ${CMAKE_INSTALL_LIBDIR}
871                 PUBLIC_HEADER DESTINATION       ${CMAKE_INSTALL_INCLUDEDIR})
872
873 endif ()
874
875 if (INSTALL_MANPAGES)
876
877         set (man_MANS
878                 man/sndfile-info.1
879                 man/sndfile-play.1
880                 man/sndfile-convert.1
881                 man/sndfile-cmp.1
882                 man/sndfile-metadata-get.1
883                 man/sndfile-concat.1
884                 man/sndfile-interleave.1
885                 man/sndfile-salvage.1
886                 )
887         install (FILES ${man_MANS} DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
888         install (FILES man/sndfile-metadata-get.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME sndfile-metadata-set.1)
889         install (FILES man/sndfile-interleave.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1 RENAME sndfile-deinterleave.1)
890 endif ()
891
892 if (ENABLE_BOW_DOCS)
893         set (HTML_BGCOLOUR "white")
894         set (HTML_FGCOLOUR "black")
895 else ()
896         set (HTML_BGCOLOUR "black")
897         set (HTML_FGCOLOUR "white")
898 endif ()
899 set (dist_doc_DATA
900         docs/index.md
901         docs/libsndfile.jpg
902         docs/libsndfile.css
903         docs/print.css
904         docs/api.md
905         docs/command.md
906         docs/bugs.md
907         docs/formats.md
908         docs/sndfile_info.md
909         docs/new_file_type_howto.md
910         docs/win32.md
911         docs/FAQ.md
912         docs/lists.md
913         docs/embedded_files.md
914         docs/octave.md
915         docs/tutorial.md
916         )
917 install (FILES ${dist_doc_DATA} DESTINATION ${CMAKE_INSTALL_DOCDIR})
918
919 if (INSTALL_PKGCONFIG_MODULE)
920         install (FILES ${CMAKE_CURRENT_BINARY_DIR}/sndfile.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
921 endif ()
922
923 #
924 # Testing
925 #
926
927 if (BUILD_TESTING)
928
929         enable_testing ()
930
931         include (CMakeAutoGen)
932
933         # generate tests sources from autogen templates
934         lsf_autogen (tests benchmark c)
935         lsf_autogen (tests floating_point_test c)
936         lsf_autogen (tests header_test c)
937         lsf_autogen (tests pcm_test c)
938         lsf_autogen (tests pipe_test c)
939         lsf_autogen (tests rdwr_test c)
940         lsf_autogen (tests scale_clip_test c)
941         lsf_autogen (tests utils c h)
942         lsf_autogen (tests write_read_test c)
943         lsf_autogen (src test_endswap c)
944
945         # utils static library
946         add_library(test_utils STATIC tests/utils.c)
947         target_include_directories (test_utils
948                 PUBLIC
949                         src
950                         ${CMAKE_CURRENT_BINARY_DIR}/src
951                         ${CMAKE_CURRENT_BINARY_DIR}/tests
952                 )
953         target_link_libraries(test_utils PRIVATE sndfile)
954
955         ### test_main
956
957         add_executable (test_main
958                 src/test_main.c
959                 src/test_main.h
960                 src/test_conversions.c
961                 src/test_float.c
962                 src/test_endswap.c
963                 src/test_audio_detect.c
964                 src/test_log_printf.c
965                 src/test_file_io.c
966                 src/test_ima_oki_adpcm.c
967                 src/test_strncpy_crlf.c
968                 src/test_broadcast_var.c
969                 src/test_cart_var.c
970                 src/test_binheader_writef.c
971                 src/test_nms_adpcm.c
972                 )
973         target_include_directories (test_main
974                 PUBLIC
975                         src
976                         ${CMAKE_CURRENT_BINARY_DIR}/src
977                         ${CMAKE_CURRENT_BINARY_DIR}/tests
978                 )
979         target_link_libraries (test_main PRIVATE sndfile)
980         if (MSVC)
981                 target_compile_definitions (test_main PRIVATE _USE_MATH_DEFINES)
982         endif ()
983         add_test (test_main test_main)
984
985         ### sfversion_test
986
987         add_executable (sfversion tests/sfversion.c)
988         target_include_directories (sfversion
989                 PRIVATE
990                         src
991                         ${CMAKE_CURRENT_BINARY_DIR}/src
992                 )
993         target_link_libraries (sfversion sndfile)
994         add_test (sfversion sfversion)
995         set_tests_properties (sfversion PROPERTIES
996                 PASS_REGULAR_EXPRESSION "${PACKAGE_NAME}-${CPACK_PACKAGE_VERSION_FULL}"
997                 )
998
999         ### error_test
1000
1001         add_executable (error_test tests/error_test.c)
1002         target_link_libraries (error_test
1003                 PRIVATE
1004                         sndfile
1005                         test_utils
1006                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1007                 )
1008         add_test (error_test error_test)
1009
1010         ### ulaw_test
1011         add_executable (ulaw_test tests/ulaw_test.c)
1012         target_link_libraries (ulaw_test
1013                 PRIVATE
1014                         sndfile
1015                         test_utils
1016                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1017                 )
1018         add_test (ulaw_test ulaw_test)
1019
1020         ### alaw_test
1021         add_executable (alaw_test tests/alaw_test.c)
1022         target_link_libraries (alaw_test
1023                 PRIVATE
1024                         sndfile
1025                         test_utils
1026                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1027                 )
1028         add_test (alaw_test alaw_test)
1029
1030         ### dwvw_test
1031
1032         add_executable (dwvw_test tests/dwvw_test.c)
1033         target_link_libraries (dwvw_test
1034                 PRIVATE
1035                         sndfile
1036                         test_utils
1037                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1038                 )
1039         add_test (dwvw_test dwvw_test)
1040
1041         ### command_test
1042
1043         add_executable (command_test tests/command_test.c)
1044         target_link_libraries (command_test
1045                 PRIVATE
1046                         sndfile
1047                         test_utils
1048                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1049                 )
1050         add_test (command_test command_test all)
1051
1052         ### floating_point_test
1053
1054         add_executable (floating_point_test
1055                 tests/dft_cmp.c
1056                 tests/floating_point_test.c
1057                 )
1058         target_link_libraries (floating_point_test
1059                 PRIVATE
1060                         sndfile
1061                         test_utils
1062                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1063                 )
1064         target_include_directories (floating_point_test PRIVATE tests)
1065         add_test (floating_point_test floating_point_test)
1066
1067         ### checksum_test
1068
1069         add_executable (checksum_test tests/checksum_test.c)
1070         target_link_libraries (checksum_test
1071                 PRIVATE
1072                         sndfile
1073                         test_utils
1074                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1075                 )
1076         add_test (checksum_test checksum_test)
1077
1078         ### scale_clip_test
1079
1080         add_executable (scale_clip_test tests/scale_clip_test.c)
1081         target_link_libraries (scale_clip_test
1082                 PRIVATE
1083                         sndfile
1084                         test_utils
1085                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1086                 )
1087         add_test (scale_clip_test scale_clip_test)
1088
1089         ### headerless_test
1090
1091         add_executable (headerless_test tests/headerless_test.c)
1092         target_link_libraries (headerless_test
1093                 PRIVATE
1094                         sndfile
1095                         test_utils
1096                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1097                 )
1098         add_test (headerless_test headerless_test)
1099
1100         ### rdwr_test
1101
1102         add_executable (rdwr_test tests/rdwr_test.c)
1103         target_link_libraries (rdwr_test
1104                 PRIVATE
1105                         sndfile
1106                         test_utils
1107                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1108                 )
1109         add_test (rdwr_test rdwr_test)
1110
1111         ### locale_test
1112
1113         add_executable (locale_test tests/locale_test.c)
1114         target_link_libraries (locale_test
1115                 PRIVATE
1116                         sndfile
1117                         test_utils
1118                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1119                 )
1120         add_test (locale_test locale_test)
1121
1122         ### win32_ordinal_test
1123
1124 # Disabled because we cannot test with shared sndfile library
1125 #       if (WIN32 AND BUILD_SHARED_LIBS)
1126 #               add_executable (win32_ordinal_test tests/win32_ordinal_test.c)
1127 #               target_link_libraries (win32_ordinal_test PRIVATE sndfile test_utils)
1128 #               add_test (win32_ordinal_test win32_ordinal_test)
1129 #       endif ()
1130
1131         ### cpp_test
1132
1133         add_executable (cpp_test tests/cpp_test.cc)
1134         target_link_libraries (cpp_test
1135                 PRIVATE
1136                         sndfile
1137                         test_utils
1138                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1139                 )
1140         add_test (cpp_test cpp_test)
1141
1142         ### external_libs_test
1143
1144         add_executable (external_libs_test tests/external_libs_test.c)
1145         target_link_libraries (external_libs_test
1146                 PRIVATE
1147                         sndfile
1148                         test_utils
1149                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1150                 )
1151         add_test (external_libs_test external_libs_test)
1152
1153         ### format_check_test
1154
1155         add_executable (format_check_test tests/format_check_test.c)
1156         target_link_libraries (format_check_test
1157                 PRIVATE
1158                         sndfile
1159                         test_utils
1160                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1161                 )
1162         add_test (format_check_test format_check_test)
1163
1164         ### channel_test
1165
1166         add_executable (channel_test tests/channel_test.c)
1167         target_link_libraries (channel_test
1168                 PRIVATE
1169                         sndfile
1170                         test_utils
1171                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1172                 )
1173         add_test (channel_test channel_test)
1174
1175         ### pcm_test
1176
1177         add_executable (pcm_test tests/pcm_test.c)
1178         target_link_libraries (pcm_test
1179                 PRIVATE
1180                         sndfile
1181                         test_utils
1182                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1183                 )
1184         add_test (pcm_test pcm_test)
1185
1186         ### common test executables
1187
1188         add_executable (write_read_test
1189                 tests/generate.c
1190                 tests/write_read_test.c
1191         )
1192         target_link_libraries (write_read_test
1193                 PRIVATE
1194                         sndfile
1195                         test_utils
1196                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1197                 )
1198         target_include_directories (write_read_test PRIVATE tests)
1199
1200         add_executable (lossy_comp_test tests/lossy_comp_test.c)
1201         target_link_libraries (lossy_comp_test
1202                 PRIVATE
1203                         sndfile
1204                         test_utils
1205                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1206                 )
1207
1208         add_executable (peak_chunk_test tests/peak_chunk_test.c)
1209         target_link_libraries (peak_chunk_test
1210                 PRIVATE
1211                         sndfile
1212                         test_utils
1213                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1214                 )
1215
1216         add_executable (header_test tests/header_test.c)
1217         target_link_libraries (header_test
1218                 PRIVATE
1219                         sndfile
1220                         test_utils
1221                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1222                 )
1223
1224         add_executable (misc_test tests/misc_test.c)
1225         target_link_libraries (misc_test
1226                 PRIVATE
1227                         sndfile
1228                         test_utils
1229                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1230                 )
1231
1232         add_executable (string_test tests/string_test.c)
1233         target_link_libraries (string_test
1234                 PRIVATE
1235                         sndfile
1236                         test_utils
1237                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1238                 )
1239
1240         add_executable (multi_file_test tests/multi_file_test.c)
1241         target_link_libraries (multi_file_test
1242                 PRIVATE
1243                         sndfile
1244                         test_utils
1245                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1246                 )
1247
1248         add_executable (aiff_rw_test tests/aiff_rw_test.c)
1249         target_link_libraries (aiff_rw_test
1250                 PRIVATE
1251                         sndfile
1252                         test_utils
1253                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1254                 )
1255
1256         add_executable (chunk_test tests/chunk_test.c)
1257         target_link_libraries (chunk_test
1258                 PRIVATE
1259                         sndfile
1260                         test_utils
1261                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1262                 )
1263
1264         add_executable (long_read_write_test tests/long_read_write_test.c)
1265         target_link_libraries (long_read_write_test
1266                 PRIVATE
1267                         sndfile
1268                         test_utils
1269                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1270                 )
1271
1272         add_executable (raw_test tests/raw_test.c)
1273         target_link_libraries (raw_test
1274                 PRIVATE
1275                         sndfile
1276                         test_utils
1277                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1278                 )
1279
1280         add_executable (compression_size_test tests/compression_size_test.c)
1281         target_link_libraries (compression_size_test
1282                 PRIVATE
1283                         sndfile
1284                         test_utils
1285                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1286                 )
1287
1288         add_executable (ogg_test tests/ogg_test.c)
1289         target_link_libraries (ogg_test
1290                 PRIVATE
1291                         sndfile
1292                         test_utils
1293                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1294                 )
1295
1296         add_executable (ogg_opus_test tests/ogg_opus_test.c)
1297         target_link_libraries (ogg_opus_test
1298                 PRIVATE
1299                         sndfile
1300                         test_utils
1301                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1302                 )
1303
1304         add_executable (mpeg_test tests/mpeg_test.c)
1305         target_link_libraries (mpeg_test
1306                 PRIVATE
1307                         sndfile
1308                         test_utils
1309                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1310                 )
1311
1312         add_executable (stdin_test tests/stdin_test.c)
1313         target_link_libraries (stdin_test
1314                 PRIVATE
1315                         sndfile
1316                         test_utils
1317                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1318                 )
1319         set_target_properties (stdin_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "tests")
1320
1321         add_executable (stdout_test tests/stdout_test.c)
1322         target_link_libraries (stdout_test
1323                 PRIVATE
1324                         sndfile
1325                         test_utils
1326                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1327                 )
1328         set_target_properties (stdout_test PROPERTIES RUNTIME_OUTPUT_DIRECTORY "tests")
1329
1330         add_executable (stdio_test tests/stdio_test.c)
1331         target_link_libraries (stdio_test
1332                 PRIVATE
1333                         sndfile
1334                         test_utils
1335                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1336                 )
1337
1338         add_executable (pipe_test tests/pipe_test.c)
1339         target_link_libraries (pipe_test
1340                 PRIVATE
1341                         sndfile
1342                         test_utils
1343                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1344                 )
1345
1346         add_executable (virtual_io_test tests/virtual_io_test.c)
1347         target_link_libraries (virtual_io_test
1348                 PRIVATE
1349                         sndfile
1350                         test_utils
1351                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1352                 )
1353
1354         ### g72x_test
1355
1356         add_executable (g72x_test src/G72x/g72x_test.c)
1357         target_include_directories (g72x_test
1358                 PRIVATE
1359                         src
1360                         ${CMAKE_CURRENT_BINARY_DIR}/src
1361                 )
1362         target_link_libraries (g72x_test
1363                 PRIVATE
1364                         sndfile
1365                         $<$<BOOL:${LIBM_REQUIRED}>:m>
1366                 )
1367         add_test (g72x_test g72x_test all)
1368
1369         ### aiff-tests
1370
1371         add_test (write_read_test_aiff write_read_test aiff)
1372         add_test (lossy_comp_test_aiff_ulaw lossy_comp_test aiff_ulaw)
1373         add_test (lossy_comp_test_aiff_alaw lossy_comp_test aiff_alaw)
1374         add_test (lossy_comp_test_aiff_gsm610 lossy_comp_test aiff_gsm610)
1375         add_test (peak_chunk_test_aiff peak_chunk_test aiff)
1376         add_test (header_test_aiff header_test aiff)
1377         add_test (misc_test_aiff misc_test aiff)
1378         add_test (string_test_aiff string_test aiff)
1379         add_test (multi_file_test_aiff multi_file_test aiff)
1380         add_test (aiff_rw_test aiff_rw_test)
1381
1382         ### au-tests
1383
1384         add_test (write_read_test_au write_read_test au)
1385         add_test (lossy_comp_test_au_ulaw lossy_comp_test au_ulaw)
1386         add_test (lossy_comp_test_au_alaw lossy_comp_test au_alaw)
1387         add_test (lossy_comp_test_au_g721 lossy_comp_test au_g721)
1388         add_test (lossy_comp_test_au_g723 lossy_comp_test au_g723)
1389         add_test (header_test_au header_test au)
1390         add_test (misc_test_au misc_test au)
1391         add_test (multi_file_test_au multi_file_test au)
1392
1393         ### caf-tests
1394
1395         add_test (write_read_test_caf write_read_test caf)
1396         add_test (lossy_comp_test_caf_ulaw lossy_comp_test caf_ulaw)
1397         add_test (lossy_comp_test_caf_alaw lossy_comp_test caf_alaw)
1398         add_test (header_test_caf header_test caf)
1399         add_test (peak_chunk_test_caf peak_chunk_test caf)
1400         add_test (misc_test_caf misc_test caf)
1401         add_test (chunk_test_caf chunk_test caf)
1402         add_test (string_test_caf string_test caf)
1403         add_test (long_read_write_test_alac long_read_write_test alac)
1404
1405         # wav-tests
1406         add_test (write_read_test_wav write_read_test wav)
1407         add_test (lossy_comp_test_wav_pcm lossy_comp_test wav_pcm)
1408         add_test (lossy_comp_test_wav_ima lossy_comp_test wav_ima)
1409         add_test (lossy_comp_test_wav_msadpcm lossy_comp_test wav_msadpcm)
1410         add_test (lossy_comp_test_wav_ulaw lossy_comp_test wav_ulaw)
1411         add_test (lossy_comp_test_wav_alaw lossy_comp_test wav_alaw)
1412         add_test (lossy_comp_test_wav_gsm610 lossy_comp_test wav_gsm610)
1413         add_test (lossy_comp_test_wav_g721 lossy_comp_test wav_g721)
1414         add_test (lossy_comp_test_wav_nmsadpcm lossy_comp_test wav_nmsadpcm)
1415         add_test (peak_chunk_test_wav peak_chunk_test wav)
1416         add_test (header_test_wav header_test wav)
1417         add_test (misc_test_wav misc_test wav)
1418         add_test (string_test_wav string_test wav)
1419         add_test (multi_file_test_wav multi_file_test wav)
1420         add_test (chunk_test_wav chunk_test wav)
1421
1422         ### w64-tests
1423
1424         add_test (write_read_test_w64 write_read_test w64)
1425         add_test (lossy_comp_test_w64_ima lossy_comp_test w64_ima)
1426         add_test (lossy_comp_test_w64_msadpcm lossy_comp_test w64_msadpcm)
1427         add_test (lossy_comp_test_w64_ulaw lossy_comp_test w64_ulaw)
1428         add_test (lossy_comp_test_w64_alaw lossy_comp_test w64_alaw)
1429         add_test (lossy_comp_test_w64_gsm610 lossy_comp_test w64_gsm610)
1430         add_test (header_test_w64 header_test w64)
1431         add_test (misc_test_w64 misc_test w64)
1432
1433         ### rf64-tests
1434
1435         add_test (write_read_test_rf64 write_read_test rf64)
1436         add_test (header_test_rf64 header_test rf64)
1437         add_test (misc_test_rf64 misc_test rf64)
1438         add_test (string_test_rf64 string_test rf64)
1439         add_test (peak_chunk_test_rf64 peak_chunk_test rf64)
1440         add_test (chunk_test_rf64 chunk_test rf64)
1441
1442         ### raw-tests
1443         add_test (write_read_test_raw write_read_test raw)
1444         add_test (lossy_comp_test_raw_ulaw lossy_comp_test raw_ulaw)
1445         add_test (lossy_comp_test_raw_alaw lossy_comp_test raw_alaw)
1446         add_test (lossy_comp_test_raw_gsm610 lossy_comp_test raw_gsm610)
1447         add_test (lossy_comp_test_vox_adpcm lossy_comp_test vox_adpcm)
1448         add_test (raw_test raw_test)
1449
1450         ### paf-tests
1451         add_test (write_read_test_paf write_read_test paf)
1452         add_test (header_test_paf header_test paf)
1453         add_test (misc_test_paf misc_test paf)
1454
1455         ### svx-tests
1456         add_test (write_read_test_svx write_read_test svx)
1457         add_test (header_test_svx header_test svx)
1458         add_test (misc_test_svx misc_test svx)
1459
1460         ### nist-tests
1461         add_test (write_read_test_nist write_read_test nist)
1462         add_test (lossy_comp_test_nist_ulaw lossy_comp_test nist_ulaw)
1463         add_test (lossy_comp_test_nist_alaw lossy_comp_test nist_alaw)
1464         add_test (header_test_nist header_test nist)
1465         add_test (misc_test_nist misc_test nist)
1466
1467         ### ircam-tests
1468         add_test (write_read_test_ircam write_read_test ircam)
1469         add_test (lossy_comp_test_ircam_ulaw lossy_comp_test ircam_ulaw)
1470         add_test (lossy_comp_test_ircam_alaw lossy_comp_test ircam_alaw)
1471         add_test (header_test_ircam header_test ircam)
1472         add_test (misc_test_ircam misc_test ircam)
1473
1474         ### voc-tests
1475         add_test (write_read_test_voc write_read_test voc)
1476         add_test (lossy_comp_test_voc_ulaw lossy_comp_test voc_ulaw)
1477         add_test (lossy_comp_test_voc_alaw lossy_comp_test voc_alaw)
1478         add_test (header_test_voc header_test voc)
1479         add_test (misc_test_voc misc_test voc)
1480
1481         ### mat4-tests
1482         add_test (write_read_test_mat4 write_read_test mat4)
1483         add_test (header_test_mat4 header_test mat4)
1484         add_test (misc_test_mat4 misc_test mat4)
1485
1486         ### mat5-tests
1487         add_test (write_read_test_mat5 write_read_test mat5)
1488         add_test (header_test_mat5 header_test mat5)
1489         add_test (misc_test_mat5 misc_test mat5)
1490
1491         ### pvf-tests
1492         add_test (write_read_test_pvf write_read_test pvf)
1493         add_test (header_test_pvf header_test pvf)
1494         add_test (misc_test_pvf misc_test pvf)
1495
1496         ### xi-tests
1497         add_test (lossy_comp_test_xi_dpcm lossy_comp_test xi_dpcm)
1498
1499         ### htk-tests
1500         add_test (write_read_test_htk write_read_test htk)
1501         add_test (header_test_htk header_test htk)
1502         add_test (misc_test_htk misc_test htk)
1503
1504         ### avr-tests
1505         add_test (write_read_test_avr write_read_test avr)
1506         add_test (header_test_avr header_test avr)
1507         add_test (misc_test_avr misc_test avr)
1508
1509         ### sds-tests
1510         add_test (write_read_test_sds write_read_test sds)
1511         add_test (header_test_sds header_test sds)
1512         add_test (misc_test_sds misc_test sds)
1513
1514         # sd2-tests
1515         add_test (write_read_test_sd2 write_read_test sd2)
1516
1517         ### wve-tests
1518         add_test (lossy_comp_test_wve lossy_comp_test wve)
1519
1520         ### mpc2k-tests
1521         add_test (write_read_test_mpc2k write_read_test mpc2k)
1522         add_test (header_test_mpc2k header_test mpc2k)
1523         add_test (misc_test_mpc2k misc_test mpc2k)
1524
1525         ### flac-tests
1526         add_test (write_read_test_flac write_read_test flac)
1527         add_test (compression_size_test_flac compression_size_test flac)
1528         add_test (string_test_flac string_test flac)
1529
1530         ### vorbis-tests
1531         add_test (ogg_test ogg_test)
1532         add_test (compression_size_test_vorbis compression_size_test vorbis)
1533         add_test (lossy_comp_test_ogg_vorbis lossy_comp_test ogg_vorbis)
1534         add_test (string_test_ogg string_test ogg)
1535         add_test (misc_test_ogg misc_test ogg)
1536
1537         ### opus-tests ###
1538         add_test (ogg_opus_test ogg_opus_test)
1539         add_test (compression_size_test_opus compression_size_test opus)
1540         add_test (lossy_comp_test_ogg_opus lossy_comp_test ogg_opus)
1541         add_test (string_test_opus string_test opus)
1542
1543         ### mpeg-tests ###
1544         add_test (mpeg_test mpeg_test)
1545         add_test (compression_size_test_mpeg compression_size_test mpeg)
1546
1547         ### io-tests
1548         add_test (stdio_test stdio_test)
1549         add_test (pipe_test pipe_test)
1550         add_test (virtual_io_test virtual_io_test)
1551
1552         set (SNDFILE_TEST_TARGETS
1553                 test_utils
1554                 test_main
1555                 sfversion
1556                 error_test
1557                 ulaw_test
1558                 alaw_test
1559                 dwvw_test
1560                 command_test
1561                 floating_point_test
1562                 checksum_test
1563                 scale_clip_test
1564                 headerless_test
1565                 rdwr_test
1566                 locale_test
1567                 cpp_test
1568                 external_libs_test
1569                 format_check_test
1570                 channel_test
1571                 pcm_test
1572                 write_read_test
1573                 lossy_comp_test
1574                 peak_chunk_test
1575                 header_test
1576                 misc_test
1577                 string_test
1578                 multi_file_test
1579                 aiff_rw_test
1580                 chunk_test
1581                 long_read_write_test
1582                 raw_test
1583                 compression_size_test
1584                 ogg_test
1585                 stdin_test
1586                 stdout_test
1587                 stdio_test
1588                 pipe_test
1589                 virtual_io_test
1590                 g72x_test
1591                 )
1592
1593 #       if (WIN32 AND BUILD_SHARED_LIBS)
1594 #               list (APPEND SNDFILE_TEST_TARGETS win32_ordinal_test)
1595 #       endif ()
1596
1597         set_target_properties(${SNDFILE_TEST_TARGETS} PROPERTIES FOLDER Tests)
1598
1599 endif ()
1600
1601 if (ENABLE_CPACK)
1602         if ((NOT CPACK_PACKAGE_VERSION) AND CPACK_PACKAGE_VERSION_STAGE)
1603                 set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_FULL}")
1604         endif ()
1605         include (CPack)
1606 endif ()