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