68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
		
		
			
		
	
	
			68 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
|   | #[=======================================================================[.rst:
 | ||
|  | FindJACK
 | ||
|  | --------
 | ||
|  | 
 | ||
|  | Finds the JACK Audio Connection Kit library.
 | ||
|  | 
 | ||
|  | Imported Targets
 | ||
|  | ^^^^^^^^^^^^^^^^
 | ||
|  | 
 | ||
|  | This module provides the following imported targets, if found:
 | ||
|  | 
 | ||
|  | ``JACK::jack``
 | ||
|  |   The JACK library
 | ||
|  | 
 | ||
|  | #]=======================================================================]
 | ||
|  | 
 | ||
|  | # Prefer finding the libraries from pkgconfig rather than find_library. This is
 | ||
|  | # required to build with PipeWire's reimplementation of the JACK library.
 | ||
|  | #
 | ||
|  | # This also enables using PortAudio with the jack2 port in vcpkg. That only
 | ||
|  | # builds JackWeakAPI (not the JACK server) which dynamically loads the real
 | ||
|  | # JACK library and forwards API calls to it. JackWeakAPI requires linking `dl`
 | ||
|  | # in addition to jack, as specified in the pkgconfig file in vcpkg.
 | ||
|  | find_package(PkgConfig QUIET)
 | ||
|  | if(PkgConfig_FOUND)
 | ||
|  |   pkg_check_modules(JACK jack)
 | ||
|  | else()
 | ||
|  |   find_library(JACK_LINK_LIBRARIES | ||
|  |     NAMES jack
 | ||
|  |     DOC "JACK library"
 | ||
|  |   )
 | ||
|  |   find_path(JACK_INCLUDEDIR | ||
|  |     NAMES jack/jack.h
 | ||
|  |     DOC "JACK header"
 | ||
|  |   )
 | ||
|  | endif()
 | ||
|  | 
 | ||
|  | find_package(Regex)
 | ||
|  | list(APPEND JACK_LINK_LIBRARIES Regex::regex)
 | ||
|  | 
 | ||
|  | if(NOT CMAKE_USE_PTHREADS_INIT)
 | ||
|  |     # This CMake find module is provided by the pthreads port in vcpkg.
 | ||
|  |     find_package(pthreads)
 | ||
|  |     list(APPEND JACK_LINK_LIBRARIES PThreads4W::PThreads4W)
 | ||
|  | endif()
 | ||
|  | 
 | ||
|  | if(CMAKE_USE_PTHREADS_INIT OR TARGET PThreads4W::PThreads4W)
 | ||
|  |   set(PTHREADS_AVAILABLE TRUE)
 | ||
|  | else()
 | ||
|  |   set(PTHREADS_AVAILABLE FALSE)
 | ||
|  | endif()
 | ||
|  | 
 | ||
|  | include(FindPackageHandleStandardArgs)
 | ||
|  | find_package_handle_standard_args( | ||
|  |   JACK
 | ||
|  |   DEFAULT_MSG
 | ||
|  |   JACK_LINK_LIBRARIES
 | ||
|  |   JACK_INCLUDEDIR
 | ||
|  |   PTHREADS_AVAILABLE
 | ||
|  |   Regex_FOUND
 | ||
|  | )
 | ||
|  | 
 | ||
|  | if(JACK_FOUND AND NOT TARGET JACK::jack)
 | ||
|  |   add_library(JACK::jack INTERFACE IMPORTED)
 | ||
|  |   target_link_libraries(JACK::jack INTERFACE "${JACK_LINK_LIBRARIES}" Regex::regex)
 | ||
|  |   target_include_directories(JACK::jack INTERFACE "${JACK_INCLUDEDIR}")
 | ||
|  | endif()
 |