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