123 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
		
		
			
		
	
	
			123 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			CMake
		
	
	
	
	
	
| 
								 | 
							
								cmake_minimum_required(VERSION 3.13)
							 | 
						||
| 
								 | 
							
								cmake_policy(VERSION 3.13)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								project(PortAudioCpp VERSION 19.8 LANGUAGES CXX)
							 | 
						||
| 
								 | 
							
								list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Todo (multi-generator): Add support for multiple generators like: - {Debug,
							 | 
						||
| 
								 | 
							
								# Release} x {Static, Dynamic} x {MT, MD (Windows only)}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ##############################################################################
							 | 
						||
| 
								 | 
							
								# sources and headers
							 | 
						||
| 
								 | 
							
								# ##############################################################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								set(portaudiocpp-sources
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/BlockingStream.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/CFunCallbackStream.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/CallbackInterface.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/CallbackStream.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/CppFunCallbackStream.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/Device.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/DirectionSpecificStreamParameters.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/Exception.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/HostApi.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/InterfaceCallbackStream.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/MemFunCallbackStream.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/Stream.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/StreamParameters.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/System.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/SystemDeviceIterator.cxx
							 | 
						||
| 
								 | 
							
								    source/portaudiocpp/SystemHostApiIterator.cxx)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# since we don't GLOBing this variable must be kept up to date otherwise user
							 | 
						||
| 
								 | 
							
								# installations are broken.
							 | 
						||
| 
								 | 
							
								set(portaudiocpp-header-files
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/AutoSystem.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/BlockingStream.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/CFunCallbackStream.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/CallbackInterface.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/CallbackStream.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/CppFunCallbackStream.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/Device.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/DirectionSpecificStreamParameters.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/Exception.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/HostApi.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/InterfaceCallbackStream.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/MemFunCallbackStream.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/PortAudioCpp.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/SampleDataFormat.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/Stream.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/StreamParameters.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/System.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/SystemDeviceIterator.hxx
							 | 
						||
| 
								 | 
							
								    include/portaudiocpp/SystemHostApiIterator.hxx)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if(WIN32)
							 | 
						||
| 
								 | 
							
								  find_package(ASIO MODULE)
							 | 
						||
| 
								 | 
							
								  if(ASIO_FOUND)
							 | 
						||
| 
								 | 
							
								    list(APPEND portaudiocpp-sources source/portaudiocpp/AsioDeviceAdapter.cxx)
							 | 
						||
| 
								 | 
							
								    list(APPEND portaudiocpp-header-files
							 | 
						||
| 
								 | 
							
								        include/portaudiocpp/AsioDeviceAdapter.hxx)
							 | 
						||
| 
								 | 
							
								  endif()
							 | 
						||
| 
								 | 
							
								endif()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ##############################################################################
							 | 
						||
| 
								 | 
							
								# portaudiocpp-targets
							 | 
						||
| 
								 | 
							
								# ##############################################################################
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								add_library(portaudiocpp ${portaudiocpp-sources})
							 | 
						||
| 
								 | 
							
								add_library(PortAudio::portaudiocpp ALIAS portaudiocpp) # For subdirectory build
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								find_package(PortAudio MODULE REQUIRED)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								target_link_libraries(portaudiocpp PUBLIC PortAudio::portaudio)
							 | 
						||
| 
								 | 
							
								target_include_directories(
							 | 
						||
| 
								 | 
							
								  portaudiocpp PUBLIC $<INSTALL_INTERFACE:include>
							 | 
						||
| 
								 | 
							
								                      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
							 | 
						||
| 
								 | 
							
								set_target_properties(portaudiocpp PROPERTIES SOVERSION 2)
							 | 
						||
| 
								 | 
							
								# Todo (modernize): update the code at least to c++14
							 | 
						||
| 
								 | 
							
								# target_compile_features(portaudiocpp PUBLIC cxx_std_14)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# ## Export ###
							 | 
						||
| 
								 | 
							
								include(GNUInstallDirs)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								install(
							 | 
						||
| 
								 | 
							
								  TARGETS portaudiocpp
							 | 
						||
| 
								 | 
							
								  EXPORT PortAudioCppTargets
							 | 
						||
| 
								 | 
							
								  LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
							 | 
						||
| 
								 | 
							
								  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
							 | 
						||
| 
								 | 
							
								  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
							 | 
						||
| 
								 | 
							
								  INCLUDES
							 | 
						||
| 
								 | 
							
								  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/portaudiocpp)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								install(FILES ${portaudiocpp-header-files}
							 | 
						||
| 
								 | 
							
								        DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/portaudiocpp)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								install(
							 | 
						||
| 
								 | 
							
								  EXPORT PortAudioCppTargets
							 | 
						||
| 
								 | 
							
								  FILE PortAudioCppTargets.cmake
							 | 
						||
| 
								 | 
							
								  NAMESPACE PortAudio::
							 | 
						||
| 
								 | 
							
								  DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PortAudio)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								include(CMakePackageConfigHelpers)
							 | 
						||
| 
								 | 
							
								configure_package_config_file(
							 | 
						||
| 
								 | 
							
								  ${CMAKE_CURRENT_SOURCE_DIR}/cmake/PortAudioCppConfig.cmake.in
							 | 
						||
| 
								 | 
							
								  "${CMAKE_CURRENT_BINARY_DIR}/PortAudioCppConfig.cmake"
							 | 
						||
| 
								 | 
							
								  INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PortAudio)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								write_basic_package_version_file(
							 | 
						||
| 
								 | 
							
								  "${CMAKE_CURRENT_BINARY_DIR}/PortAudioCppConfigVersion.cmake"
							 | 
						||
| 
								 | 
							
								  COMPATIBILITY SameMajorVersion
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								install(FILES "${CMAKE_CURRENT_BINARY_DIR}/PortAudioCppConfig.cmake"
							 | 
						||
| 
								 | 
							
								              "${CMAKE_CURRENT_BINARY_DIR}/PortAudioCppConfigVersion.cmake"
							 | 
						||
| 
								 | 
							
								        DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/PortAudio)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#use relative path, since CMAKE can't reconfigure on install with different prefix path 
							 | 
						||
| 
								 | 
							
								set(PC_PREFIX "\${pcfiledir}/../..")  
							 | 
						||
| 
								 | 
							
								configure_file(cmake/portaudiocpp.pc.in "${CMAKE_CURRENT_BINARY_DIR}/portaudiocpp.pc" @ONLY)
							 | 
						||
| 
								 | 
							
								install(FILES "${CMAKE_CURRENT_BINARY_DIR}/portaudiocpp.pc"
							 | 
						||
| 
								 | 
							
								        CONFIGURATIONS Release RelWithDebInfo
							 | 
						||
| 
								 | 
							
								        DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
							 |