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