File: Findlibopenmpt.cmake

package info (click to toggle)
jazz2-native 3.3.0-1
  • links: PTS, VCS
  • area: contrib
  • in suites:
  • size: 16,008 kB
  • sloc: cpp: 162,929; xml: 111; python: 31; makefile: 5; sh: 2
file content (119 lines) | stat: -rw-r--r-- 4,211 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
include(ncine_helpers)

if(NOT NCINE_COMPILE_OPENMPT)
	find_path(LIBOPENMPT_INCLUDE_DIR DOC "Path to libopenmpt include directory"
		NAMES libopenmpt.h
		PATHS
		/usr/include/
		/usr/local/include/
		/usr/include/libopenmpt/
		/usr/local/include/libopenmpt/
		${EXTERNAL_INCLUDES_DIR}/libopenmpt/
	)
	mark_as_advanced(LIBOPENMPT_INCLUDE_DIR)

	if(EMSCRIPTEN)
		if(EXISTS "${NCINE_LIBS}/Emscripten/libopenmpt.a")
			set(LIBOPENMPT_LIBRARY "${NCINE_LIBS}/Emscripten/libopenmpt.a")
			mark_as_advanced(LIBOPENMPT_LIBRARY)
		endif()
	else()
		find_library(LIBOPENMPT_LIBRARY DOC "Path to libopenmpt library"
			NAMES libopenmpt openmpt
			NAMES_PER_DIR
			PATH_SUFFIXES
			lib64
			lib
			libx32
			lib/x64
			x86_64-w64-mingw32/lib
			PATHS
			/sw
			/opt/local
			/opt/csw
			/opt
			${NCINE_LIBS}/Linux/${CMAKE_SYSTEM_PROCESSOR}/
		)
		mark_as_advanced(LIBOPENMPT_LIBRARY)
	endif()

	if(NOT TARGET libopenmpt::libopenmpt)
		if(LIBOPENMPT_INCLUDE_DIR AND LIBOPENMPT_LIBRARY)
			if(EMSCRIPTEN)
				add_library(libopenmpt::libopenmpt STATIC IMPORTED)
				set(LIBOPENMPT_STATIC TRUE)
				mark_as_advanced(LIBOPENMPT_STATIC)
			else()
				add_library(libopenmpt::libopenmpt SHARED IMPORTED)
			endif()
		
			set_target_properties(libopenmpt::libopenmpt PROPERTIES
				IMPORTED_LOCATION ${LIBOPENMPT_LIBRARY}
				INTERFACE_INCLUDE_DIRECTORIES ${LIBOPENMPT_INCLUDE_DIR})
		else()
		endif()
	endif()
endif()

if(NOT TARGET libopenmpt::libopenmpt AND (NCINE_DOWNLOAD_DEPENDENCIES OR NCINE_COMPILE_OPENMPT))
	# Try to build `libopenmpt` from source
	set(LIBOPENMPT_URL "https://github.com/OpenMPT/openmpt/archive/libopenmpt-0.7.1.tar.gz")
	message(STATUS "Downloading dependencies from \"${LIBOPENMPT_URL}\"...")

	include(FetchContent)
	FetchContent_Declare(
		LibopenmptGit
		DOWNLOAD_EXTRACT_TIMESTAMP TRUE
		URL ${LIBOPENMPT_URL}
	)
	FetchContent_MakeAvailable(LibopenmptGit)
		
	ncine_add_dependency(Libopenmpt STATIC ALLOW_EXCEPTIONS)

	set(LIBOPENMPT_INCLUDE_DIR "${libopenmptgit_SOURCE_DIR}/libopenmpt/")
	set_target_properties(Libopenmpt PROPERTIES
		INTERFACE_INCLUDE_DIRECTORIES ${LIBOPENMPT_INCLUDE_DIR})

	target_compile_definitions(Libopenmpt PRIVATE "LIBOPENMPT_BUILD" "MPT_CHECK_CXX_IGNORE_WARNING_FINITEMATH")

	if(EMSCRIPTEN)
		target_compile_definitions(Libopenmpt PRIVATE "MPT_WITH_ZLIB" "MPT_WITH_MPG123" "MPT_WITH_VORBIS" "MPT_WITH_VORBISFILE" "MPT_BUILD_WASM")
		
		target_compile_options(Libopenmpt PUBLIC "SHELL:-s USE_ZLIB=1 -s USE_MPG123=1 -s USE_OGG=1 -s USE_VORBIS=1")
		target_link_options(Libopenmpt PUBLIC "SHELL:-s USE_ZLIB=1 -s USE_MPG123=1 -s USE_OGG=1 -s USE_VORBIS=1")
	else()
		find_package(ZLIB)

		# TODO: Add MPT_WITH_MPG123 and MPT_WITH_VORBIS support
		target_compile_definitions(Libopenmpt PRIVATE "MPT_WITH_ZLIB")
	endif()
		
	set(LIBOPENMPT_SOURCES)
	file(GLOB_RECURSE _files "${libopenmptgit_SOURCE_DIR}/common/*.cpp")
	list(APPEND LIBOPENMPT_SOURCES ${_files})
	file(GLOB_RECURSE _files "${libopenmptgit_SOURCE_DIR}/sounddsp/*.cpp")
	list(APPEND LIBOPENMPT_SOURCES ${_files})
	file(GLOB_RECURSE _files "${libopenmptgit_SOURCE_DIR}/soundlib/*.cpp")
	list(APPEND LIBOPENMPT_SOURCES ${_files})

	list(APPEND LIBOPENMPT_SOURCES
		"${libopenmptgit_SOURCE_DIR}/libopenmpt/libopenmpt_c.cpp"
		"${libopenmptgit_SOURCE_DIR}/libopenmpt/libopenmpt_cxx.cpp"
		"${libopenmptgit_SOURCE_DIR}/libopenmpt/libopenmpt_impl.cpp"
		"${libopenmptgit_SOURCE_DIR}/libopenmpt/libopenmpt_ext_impl.cpp")

	ncine_assign_source_group(PATH_PREFIX ${libopenmptgit_SOURCE_DIR} FILES ${LIBOPENMPT_SOURCES} SKIP_EXTERNAL)
	target_sources(Libopenmpt PRIVATE ${LIBOPENMPT_SOURCES})
	target_include_directories(Libopenmpt PRIVATE "${libopenmptgit_SOURCE_DIR}" "${libopenmptgit_SOURCE_DIR}/common" "${libopenmptgit_SOURCE_DIR}/src" "${ZLIB_INCLUDE_DIRS}")

	file(WRITE "${libopenmptgit_SOURCE_DIR}/common/svn_version.h" "#pragma once\n#define OPENMPT_VERSION_REVISION 0")

	add_library(libopenmpt::libopenmpt ALIAS Libopenmpt)
	set(LIBOPENMPT_STATIC TRUE)
	mark_as_advanced(LIBOPENMPT_STATIC)
endif()

if(TARGET libopenmpt::libopenmpt AND NOT LIBOPENMPT_STATIC)
	include(FindPackageHandleStandardArgs)
	find_package_handle_standard_args(libopenmpt REQUIRED_VARS LIBOPENMPT_LIBRARY LIBOPENMPT_INCLUDE_DIR)
endif()