CMakeLists.txt 41 KB

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