Browse Source
Modules for Magnum dependencies are no longer needed, as it installs and uses them automatically.next
7 changed files with 185 additions and 788 deletions
@ -1,86 +0,0 @@
|
||||
#.rst: |
||||
# Find EGL |
||||
# -------- |
||||
# |
||||
# Finds the EGL library. This module defines: |
||||
# |
||||
# EGL_FOUND - True if EGL library is found |
||||
# EGL::EGL - EGL imported target |
||||
# |
||||
# Additionally these variables are defined for internal usage: |
||||
# |
||||
# EGL_LIBRARY - EGL library |
||||
# EGL_INCLUDE_DIR - Include dir |
||||
# |
||||
|
||||
# |
||||
# This file is part of Magnum. |
||||
# |
||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, |
||||
# 2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz> |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a |
||||
# copy of this software and associated documentation files (the "Software"), |
||||
# to deal in the Software without restriction, including without limitation |
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
# and/or sell copies of the Software, and to permit persons to whom the |
||||
# Software is furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included |
||||
# in all copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
# DEALINGS IN THE SOFTWARE. |
||||
# |
||||
|
||||
# Under Emscripten, EGL is linked implicitly. With MINIMAL_RUNTIME you need to |
||||
# specify -lEGL. Simply set the library name to that. |
||||
if(CORRADE_TARGET_EMSCRIPTEN) |
||||
set(EGL_LIBRARY EGL CACHE STRING "Path to a library." FORCE) |
||||
else() |
||||
find_library(EGL_LIBRARY NAMES |
||||
EGL |
||||
|
||||
# ANGLE (CMake doesn't search for lib prefix on Windows) |
||||
libEGL |
||||
|
||||
# On iOS a part of OpenGLES |
||||
OpenGLES) |
||||
endif() |
||||
|
||||
# Include dir |
||||
find_path(EGL_INCLUDE_DIR NAMES |
||||
EGL/egl.h |
||||
|
||||
# iOS |
||||
EAGL.h) |
||||
|
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args(EGL DEFAULT_MSG |
||||
EGL_LIBRARY |
||||
EGL_INCLUDE_DIR) |
||||
|
||||
if(NOT TARGET EGL::EGL) |
||||
# Work around BUGGY framework support on macOS. Do this also in case of |
||||
# Emscripten, since there we don't have a location either. |
||||
# http://public.kitware.com/pipermail/cmake/2016-April/063179.html |
||||
if((APPLE AND EGL_LIBRARY MATCHES "\\.framework$") OR CORRADE_TARGET_EMSCRIPTEN) |
||||
add_library(EGL::EGL INTERFACE IMPORTED) |
||||
set_property(TARGET EGL::EGL APPEND PROPERTY |
||||
INTERFACE_LINK_LIBRARIES ${EGL_LIBRARY}) |
||||
else() |
||||
add_library(EGL::EGL UNKNOWN IMPORTED) |
||||
set_property(TARGET EGL::EGL PROPERTY |
||||
IMPORTED_LOCATION ${EGL_LIBRARY}) |
||||
endif() |
||||
|
||||
set_target_properties(EGL::EGL PROPERTIES |
||||
INTERFACE_INCLUDE_DIRECTORIES ${EGL_INCLUDE_DIR}) |
||||
endif() |
||||
|
||||
mark_as_advanced(EGL_LIBRARY EGL_INCLUDE_DIR) |
||||
@ -1,141 +0,0 @@
|
||||
#.rst: |
||||
# Find GLFW |
||||
# --------- |
||||
# |
||||
# Finds the GLFW library using its cmake config if that exists, otherwise |
||||
# falls back to finding it manually. This module defines: |
||||
# |
||||
# GLFW_FOUND - True if GLFW library is found |
||||
# GLFW::GLFW - GLFW imported target |
||||
# |
||||
# Additionally, in case the config was not found, these variables are defined |
||||
# for internal usage: |
||||
# |
||||
# GLFW_LIBRARY - GLFW library |
||||
# GLFW_DLL_DEBUG - GLFW debug DLL on Windows, if found |
||||
# GLFW_DLL_RELEASE - GLFW release DLL on Windows, if found |
||||
# GLFW_INCLUDE_DIR - Root include dir |
||||
# |
||||
|
||||
# |
||||
# This file is part of Magnum. |
||||
# |
||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, |
||||
# 2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz> |
||||
# Copyright © 2016 Jonathan Hale <squareys@googlemail.com> |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a |
||||
# copy of this software and associated documentation files (the "Software"), |
||||
# to deal in the Software without restriction, including without limitation |
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
# and/or sell copies of the Software, and to permit persons to whom the |
||||
# Software is furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included |
||||
# in all copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
# DEALINGS IN THE SOFTWARE. |
||||
# |
||||
|
||||
# GLFW installs cmake package config files which handles dependencies in case |
||||
# GLFW is built statically. Try to find first, quietly, so it doesn't print |
||||
# loud messages when it's not found, since that's okay. If the glfw target |
||||
# already exists, it means we're using it through a CMake subproject -- don't |
||||
# attempt to find the package in that case. |
||||
if(NOT TARGET glfw) |
||||
find_package(glfw3 CONFIG QUIET) |
||||
endif() |
||||
|
||||
# If either a glfw config file was found or we have a subproject, point |
||||
# GLFW::GLFW to that and exit -- nothing else to do here. |
||||
if(TARGET glfw) |
||||
if(NOT TARGET GLFW::GLFW) |
||||
# Aliases of (global) targets are only supported in CMake 3.11, so we |
||||
# work around it by this. This is easier than fetching all possible |
||||
# properties (which are impossible to track of) and then attempting to |
||||
# rebuild them into a new target. |
||||
add_library(GLFW::GLFW INTERFACE IMPORTED) |
||||
set_target_properties(GLFW::GLFW PROPERTIES INTERFACE_LINK_LIBRARIES glfw) |
||||
endif() |
||||
|
||||
# Just to make FPHSA print some meaningful location, nothing else |
||||
get_target_property(_GLFW_INTERFACE_INCLUDE_DIRECTORIES glfw INTERFACE_INCLUDE_DIRECTORIES) |
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args("GLFW" DEFAULT_MSG |
||||
_GLFW_INTERFACE_INCLUDE_DIRECTORIES) |
||||
|
||||
if(CORRADE_TARGET_WINDOWS) |
||||
# .dll is in LOCATION, .lib is in IMPLIB. Yay, useful! |
||||
get_target_property(GLFW_DLL_DEBUG glfw IMPORTED_LOCATION_DEBUG) |
||||
get_target_property(GLFW_DLL_RELEASE glfw IMPORTED_LOCATION_RELEASE) |
||||
endif() |
||||
|
||||
return() |
||||
endif() |
||||
|
||||
if(CORRADE_TARGET_WINDOWS) |
||||
if(MSVC) |
||||
if(MSVC_VERSION VERSION_LESS 1910) |
||||
set(_GLFW_LIBRARY_PATH_SUFFIX lib-vc2015) |
||||
elseif(MSVC_VERSION VERSION_LESS 1920) |
||||
set(_GLFW_LIBRARY_PATH_SUFFIX lib-vc2017) |
||||
elseif(MSVC_VERSION VERSION_LESS 1930) |
||||
set(_GLFW_LIBRARY_PATH_SUFFIX lib-vc2019) |
||||
# MSVC 2022 17.10 overflowed the 1930 range to 1940, so assume a |
||||
# hypothetical MSVC 2025 will start with 1950. |
||||
elseif(MSVC_VERSION VERSION_LESS 1950) |
||||
set(_GLFW_LIBRARY_PATH_SUFFIX lib-vc2022) |
||||
else() |
||||
message(FATAL_ERROR "Unsupported MSVC version") |
||||
endif() |
||||
elseif(MINGW) |
||||
set(_GLFW_LIBRARY_PATH_SUFFIX lib-mingw-w64) |
||||
else() |
||||
message(FATAL_ERROR "Unsupported compiler") |
||||
endif() |
||||
endif() |
||||
|
||||
# In case no config file was found, try manually finding the library. Prefer |
||||
# the glfw3dll as it's a dynamic library. |
||||
find_library(GLFW_LIBRARY |
||||
NAMES glfw glfw3dll glfw3 |
||||
PATH_SUFFIXES ${_GLFW_LIBRARY_PATH_SUFFIX}) |
||||
|
||||
if(CORRADE_TARGET_WINDOWS AND GLFW_LIBRARY MATCHES "glfw3dll.(lib|a)$") |
||||
# TODO: debug? |
||||
find_file(GLFW_DLL_RELEASE |
||||
NAMES glfw3.dll |
||||
PATH_SUFFIXES ${_GLFW_LIBRARY_PATH_SUFFIX}) |
||||
endif() |
||||
|
||||
# Include dir |
||||
find_path(GLFW_INCLUDE_DIR |
||||
NAMES GLFW/glfw3.h) |
||||
|
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args("GLFW" DEFAULT_MSG |
||||
GLFW_LIBRARY |
||||
GLFW_INCLUDE_DIR) |
||||
|
||||
if(NOT TARGET GLFW::GLFW) |
||||
add_library(GLFW::GLFW UNKNOWN IMPORTED) |
||||
|
||||
# Work around BUGGY framework support on macOS |
||||
# https://cmake.org/Bug/view.php?id=14105 |
||||
if(CORRADE_TARGET_APPLE AND GLFW_LIBRARY MATCHES "\\.framework$") |
||||
set_property(TARGET GLFW::GLFW PROPERTY IMPORTED_LOCATION ${GLFW_LIBRARY}/GLFW) |
||||
else() |
||||
set_property(TARGET GLFW::GLFW PROPERTY IMPORTED_LOCATION ${GLFW_LIBRARY}) |
||||
endif() |
||||
|
||||
set_property(TARGET GLFW::GLFW PROPERTY |
||||
INTERFACE_INCLUDE_DIRECTORIES ${GLFW_INCLUDE_DIR}) |
||||
endif() |
||||
|
||||
mark_as_advanced(GLFW_LIBRARY GLFW_INCLUDE_DIR) |
||||
@ -1,78 +0,0 @@
|
||||
#.rst: |
||||
# Find OpenGL ES 2 |
||||
# ---------------- |
||||
# |
||||
# Finds the OpenGL ES 2 library. This module defines: |
||||
# |
||||
# OpenGLES2_FOUND - True if OpenGL ES 2 library is found |
||||
# OpenGLES2::OpenGLES2 - OpenGL ES 2 imported target |
||||
# |
||||
# Additionally these variables are defined for internal usage: |
||||
# |
||||
# OPENGLES2_LIBRARY - OpenGL ES 2 library |
||||
# |
||||
# Please note this find module is tailored especially for the needs of Magnum. |
||||
# In particular, it depends on its platform definitions and doesn't look for |
||||
# OpenGL ES includes as Magnum has its own, generated using flextGL. |
||||
# |
||||
|
||||
# |
||||
# This file is part of Magnum. |
||||
# |
||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, |
||||
# 2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz> |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a |
||||
# copy of this software and associated documentation files (the "Software"), |
||||
# to deal in the Software without restriction, including without limitation |
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
# and/or sell copies of the Software, and to permit persons to whom the |
||||
# Software is furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included |
||||
# in all copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
# DEALINGS IN THE SOFTWARE. |
||||
# |
||||
|
||||
# Under Emscripten, GL is linked implicitly. With MINIMAL_RUNTIME you need to |
||||
# specify -lGL. Simply set the library name to that. |
||||
if(CORRADE_TARGET_EMSCRIPTEN) |
||||
set(OPENGLES2_LIBRARY GL CACHE STRING "Path to a library." FORCE) |
||||
else() |
||||
find_library(OPENGLES2_LIBRARY NAMES |
||||
GLESv2 |
||||
|
||||
# ANGLE (CMake doesn't search for lib prefix on Windows) |
||||
libGLESv2 |
||||
|
||||
# iOS |
||||
OpenGLES) |
||||
endif() |
||||
|
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args(OpenGLES2 DEFAULT_MSG |
||||
OPENGLES2_LIBRARY) |
||||
|
||||
if(NOT TARGET OpenGLES2::OpenGLES2) |
||||
# Work around BUGGY framework support on macOS. Do this also in case of |
||||
# Emscripten, since there we don't have a location either. |
||||
# http://public.kitware.com/pipermail/cmake/2016-April/063179.html |
||||
if((CORRADE_TARGET_APPLE AND OPENGLES2_LIBRARY MATCHES "\\.framework$") OR CORRADE_TARGET_EMSCRIPTEN) |
||||
add_library(OpenGLES2::OpenGLES2 INTERFACE IMPORTED) |
||||
set_property(TARGET OpenGLES2::OpenGLES2 APPEND PROPERTY |
||||
INTERFACE_LINK_LIBRARIES ${OPENGLES2_LIBRARY}) |
||||
else() |
||||
add_library(OpenGLES2::OpenGLES2 UNKNOWN IMPORTED) |
||||
set_property(TARGET OpenGLES2::OpenGLES2 PROPERTY |
||||
IMPORTED_LOCATION ${OPENGLES2_LIBRARY}) |
||||
endif() |
||||
endif() |
||||
|
||||
mark_as_advanced(OPENGLES2_LIBRARY) |
||||
@ -1,92 +0,0 @@
|
||||
#.rst: |
||||
# Find OpenGL ES 3 |
||||
# ---------------- |
||||
# |
||||
# Finds the OpenGL ES 3 library. This module defines: |
||||
# |
||||
# OpenGLES3_FOUND - True if OpenGL ES 3 library is found |
||||
# OpenGLES3::OpenGLES3 - OpenGL ES 3 imported target |
||||
# |
||||
# Additionally these variables are defined for internal usage: |
||||
# |
||||
# OPENGLES3_LIBRARY - OpenGL ES 3 library |
||||
# |
||||
# Please note this find module is tailored especially for the needs of Magnum. |
||||
# In particular, it depends on its platform definitions and doesn't look for |
||||
# OpenGL ES includes as Magnum has its own, generated using flextGL. |
||||
# |
||||
|
||||
# |
||||
# This file is part of Magnum. |
||||
# |
||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, |
||||
# 2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz> |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a |
||||
# copy of this software and associated documentation files (the "Software"), |
||||
# to deal in the Software without restriction, including without limitation |
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
# and/or sell copies of the Software, and to permit persons to whom the |
||||
# Software is furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included |
||||
# in all copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
# DEALINGS IN THE SOFTWARE. |
||||
# |
||||
|
||||
# Under Emscripten, GL is linked implicitly. With MINIMAL_RUNTIME you need to |
||||
# specify -lGL. Simply set the library name to that. |
||||
if(CORRADE_TARGET_EMSCRIPTEN) |
||||
set(OPENGLES3_LIBRARY GL CACHE STRING "Path to a library." FORCE) |
||||
else() |
||||
find_library(OPENGLES3_LIBRARY NAMES |
||||
# Used by Android |
||||
GLESv3 |
||||
|
||||
# On some platforms (e.g. desktop emulation with Mesa or NVidia) ES3 |
||||
# support is provided in ES2 lib |
||||
GLESv2 |
||||
|
||||
# ANGLE (CMake doesn't search for lib prefix on Windows) |
||||
libGLESv2 |
||||
|
||||
# iOS |
||||
OpenGLES) |
||||
endif() |
||||
|
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args("OpenGLES3" DEFAULT_MSG |
||||
OPENGLES3_LIBRARY) |
||||
|
||||
if(NOT TARGET OpenGLES3::OpenGLES3) |
||||
# Work around BUGGY framework support on macOS. Do this also in case of |
||||
# Emscripten, since there we don't have a location either. |
||||
# http://public.kitware.com/pipermail/cmake/2016-April/063179.html |
||||
if((CORRADE_TARGET_APPLE AND OPENGLES3_LIBRARY MATCHES "\\.framework$") OR CORRADE_TARGET_EMSCRIPTEN) |
||||
add_library(OpenGLES3::OpenGLES3 INTERFACE IMPORTED) |
||||
set_property(TARGET OpenGLES3::OpenGLES3 APPEND PROPERTY |
||||
INTERFACE_LINK_LIBRARIES ${OPENGLES3_LIBRARY}) |
||||
else() |
||||
add_library(OpenGLES3::OpenGLES3 UNKNOWN IMPORTED) |
||||
set_property(TARGET OpenGLES3::OpenGLES3 PROPERTY |
||||
IMPORTED_LOCATION ${OPENGLES3_LIBRARY}) |
||||
endif() |
||||
|
||||
# Emscripten needs a special flag to use WebGL 2 |
||||
if(CORRADE_TARGET_EMSCRIPTEN) |
||||
if(CMAKE_VERSION VERSION_LESS 3.13) |
||||
message(FATAL_ERROR "CMake 3.13+ is required in order to specify Emscripten linker options") |
||||
endif() |
||||
set_property(TARGET OpenGLES3::OpenGLES3 APPEND PROPERTY |
||||
INTERFACE_LINK_OPTIONS "SHELL:-s USE_WEBGL2=1") |
||||
endif() |
||||
endif() |
||||
|
||||
mark_as_advanced(OPENGLES3_LIBRARY) |
||||
@ -1,286 +0,0 @@
|
||||
#.rst: |
||||
# Find SDL2 |
||||
# --------- |
||||
# |
||||
# Finds the SDL2 library. This module defines: |
||||
# |
||||
# SDL2_FOUND - True if SDL2 library is found |
||||
# SDL2::SDL2 - SDL2 imported target |
||||
# |
||||
# Additionally these variables are defined for internal usage: |
||||
# |
||||
# SDL2_LIBRARY_DEBUG - SDL2 debug library, if found |
||||
# SDL2_LIBRARY_RELEASE - SDL2 release library, if found |
||||
# SDL2_DLL_DEBUG - SDL2 debug DLL on Windows, if found |
||||
# SDL2_DLL_RELEASE - SDL2 release DLL on Windows, if found |
||||
# SDL2_INCLUDE_DIR - Root include dir |
||||
# |
||||
|
||||
# |
||||
# This file is part of Magnum. |
||||
# |
||||
# Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, |
||||
# 2020, 2021, 2022, 2023 Vladimír Vondruš <mosra@centrum.cz> |
||||
# Copyright © 2018 Jonathan Hale <squareys@googlemail.com> |
||||
# |
||||
# Permission is hereby granted, free of charge, to any person obtaining a |
||||
# copy of this software and associated documentation files (the "Software"), |
||||
# to deal in the Software without restriction, including without limitation |
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense, |
||||
# and/or sell copies of the Software, and to permit persons to whom the |
||||
# Software is furnished to do so, subject to the following conditions: |
||||
# |
||||
# The above copyright notice and this permission notice shall be included |
||||
# in all copies or substantial portions of the Software. |
||||
# |
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL |
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
||||
# DEALINGS IN THE SOFTWARE. |
||||
# |
||||
|
||||
# If we have a CMake subproject, use the targets directly. I'd prefer the |
||||
# static variant, however SDL2 defines its own SDL2::SDL2 alias for only the |
||||
# dynamic variant since https://github.com/libsdl-org/SDL/pull/4074 and so I'm |
||||
# forced to use that, if available. |
||||
if(TARGET SDL2) |
||||
# In case we don't have https://github.com/libsdl-org/SDL/pull/4074 yet, |
||||
# do the alias ourselves. |
||||
if(NOT TARGET SDL2::SDL2) |
||||
# Aliases of (global) targets are only supported in CMake 3.11, so we |
||||
# work around it by this. This is easier than fetching all possible |
||||
# properties (which are impossible to track of) and then attempting to |
||||
# rebuild them into a new target. |
||||
add_library(SDL2::SDL2 INTERFACE IMPORTED) |
||||
set_target_properties(SDL2::SDL2 PROPERTIES INTERFACE_LINK_LIBRARIES SDL2) |
||||
endif() |
||||
|
||||
# Just to make FPHSA print some meaningful location, nothing else. Not |
||||
# using the INTERFACE_INCLUDE_DIRECTORIES as that contains |
||||
# $<BUILD_INTERFACE and looks ugly in the output. Funnily enough, the |
||||
# BUILD_INTERFACE thing works here without having to override it with |
||||
# custom-found paths like I do in FindAssimp and elsewhere. Needs further |
||||
# investigation. |
||||
get_target_property(_SDL2_SOURCE_DIR SDL2 SOURCE_DIR) |
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args("SDL2" DEFAULT_MSG _SDL2_SOURCE_DIR) |
||||
|
||||
if(CORRADE_TARGET_WINDOWS) |
||||
# .dll is in LOCATION, .lib is in IMPLIB. Yay, useful! |
||||
get_target_property(SDL2_DLL_DEBUG SDL2 IMPORTED_LOCATION_DEBUG) |
||||
get_target_property(SDL2_DLL_RELEASE SDL2 IMPORTED_LOCATION_RELEASE) |
||||
endif() |
||||
|
||||
return() |
||||
|
||||
# The static build is a separate target for some reason. I wonder HOW that |
||||
# makes more sense than just having a build-time option for static/shared and |
||||
# use the same name for both. Are all depending projects supposed to branch on |
||||
# it like this?! |
||||
elseif(TARGET SDL2-static) |
||||
# The target should not be defined by SDL itself. If it is, that's from us. |
||||
if(NOT TARGET SDL2::SDL2) |
||||
# Aliases of (global) targets are only supported in CMake 3.11, so we |
||||
# work around it by this. This is easier than fetching all possible |
||||
# properties (which are impossible to track of) and then attempting to |
||||
# rebuild them into a new target. |
||||
add_library(SDL2::SDL2 INTERFACE IMPORTED) |
||||
set_target_properties(SDL2::SDL2 PROPERTIES INTERFACE_LINK_LIBRARIES SDL2-static) |
||||
endif() |
||||
|
||||
# Just to make FPHSA print some meaningful location, nothing else |
||||
get_target_property(_SDL2_SOURCE_DIR SDL2-static SOURCE_DIR) |
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args("SDL2" DEFAULT_MSG _SDL2_SOURCE_DIR) |
||||
|
||||
return() |
||||
endif() |
||||
|
||||
# In Emscripten SDL is linked automatically, thus no need to find the library. |
||||
# Also the includes are in SDL subdirectory, not SDL2. |
||||
if(CORRADE_TARGET_EMSCRIPTEN) |
||||
set(_SDL2_PATH_SUFFIXES SDL) |
||||
else() |
||||
set(_SDL2_PATH_SUFFIXES SDL2) |
||||
if(WIN32) |
||||
# Precompiled libraries for MSVC are in x86/x64 subdirectories |
||||
if(MSVC) |
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
||||
set(_SDL2_LIBRARY_PATH_SUFFIX lib/x64) |
||||
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) |
||||
set(_SDL2_LIBRARY_PATH_SUFFIX lib/x86) |
||||
endif() |
||||
|
||||
# Both includes and libraries for MinGW are in some directory deep |
||||
# inside. There's also a CMake config file but it has HARDCODED path |
||||
# to /opt/local/i686-w64-mingw32, which doesn't make ANY SENSE, |
||||
# especially on Windows. |
||||
elseif(MINGW) |
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8) |
||||
set(_SDL2_LIBRARY_PATH_SUFFIX x86_64-w64-mingw32/lib) |
||||
set(_SDL2_RUNTIME_PATH_SUFFIX x86_64-w64-mingw32/bin) |
||||
list(APPEND _SDL2_PATH_SUFFIXES x86_64-w64-mingw32/include/SDL2) |
||||
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) |
||||
set(_SDL2_LIBRARY_PATH_SUFFIX i686-w64-mingw32/lib) |
||||
set(_SDL2_RUNTIME_PATH_SUFFIX i686-w64-mingw32/lib) |
||||
list(APPEND _SDL2_PATH_SUFFIXES i686-w64-mingw32/include/SDL2) |
||||
endif() |
||||
else() |
||||
message(FATAL_ERROR "Unsupported compiler") |
||||
endif() |
||||
endif() |
||||
|
||||
find_library(SDL2_LIBRARY_RELEASE |
||||
# Compiling SDL2 from scratch on macOS creates dead libSDL2.so symlink |
||||
# which CMake somehow prefers before the SDL2-2.0.dylib file. Making |
||||
# the dylib first so it is preferred. Not sure how this maps to debug |
||||
# config though :/ |
||||
NAMES SDL2-2.0 SDL2 SDL2-static |
||||
PATH_SUFFIXES ${_SDL2_LIBRARY_PATH_SUFFIX}) |
||||
find_library(SDL2_LIBRARY_DEBUG |
||||
NAMES SDL2d SDL2-staticd |
||||
PATH_SUFFIXES ${_SDL2_LIBRARY_PATH_SUFFIX}) |
||||
# FPHSA needs one of the _DEBUG/_RELEASE variables to check that the |
||||
# library was found -- using SDL_LIBRARY, which will get populated by |
||||
# select_library_configurations() below. |
||||
set(SDL2_LIBRARY_NEEDED SDL2_LIBRARY) |
||||
endif() |
||||
|
||||
include(SelectLibraryConfigurations) |
||||
select_library_configurations(SDL2) |
||||
|
||||
# Include dir |
||||
find_path(SDL2_INCLUDE_DIR |
||||
# We must search file which is present only in SDL2 and not in SDL1. |
||||
# Apparently when both SDL.h and SDL_scancode.h are specified, CMake is |
||||
# happy enough that it found SDL.h and doesn't bother about the other. |
||||
# |
||||
# On macOS, where the includes are not in SDL2/SDL.h form (which would |
||||
# solve this issue), but rather SDL2.framework/Headers/SDL.h, CMake might |
||||
# find SDL.framework/Headers/SDL.h if SDL1 is installed, which is wrong. |
||||
NAMES SDL_scancode.h |
||||
PATH_SUFFIXES ${_SDL2_PATH_SUFFIXES}) |
||||
|
||||
# DLL on Windows |
||||
if(CORRADE_TARGET_WINDOWS) |
||||
find_file(SDL2_DLL_RELEASE |
||||
NAMES SDL2.dll |
||||
PATH_SUFFIXES bin ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX}) |
||||
find_file(SDL2_DLL_DEBUG |
||||
NAMES SDL2d.dll # not sure? |
||||
PATH_SUFFIXES bin ${_SDL2_RUNTIME_PATH_SUFFIX} ${_SDL2_LIBRARY_PATH_SUFFIX}) |
||||
endif() |
||||
|
||||
# (Static) macOS / iOS dependencies. On macOS these were mainly needed when |
||||
# building SDL statically using its CMake project, on iOS always. |
||||
if(CORRADE_TARGET_APPLE AND (SDL2_LIBRARY_DEBUG MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$" OR SDL2_LIBRARY_RELEASE MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$")) |
||||
set(_SDL2_FRAMEWORKS |
||||
iconv # should be in the system, needed by iOS as well now |
||||
AudioToolbox |
||||
AVFoundation |
||||
CoreHaptics # needed since 2.0.18(?) on iOS and macOS |
||||
Foundation |
||||
Metal # needed since 2.0.8 on iOS, since 2.0.14 on macOS |
||||
GameController) # needed since 2.0.18(?) on macOS as well |
||||
if(CORRADE_TARGET_IOS) |
||||
list(APPEND _SDL2_FRAMEWORKS |
||||
CoreBluetooth # needed since 2.0.10 |
||||
CoreGraphics |
||||
CoreMotion |
||||
Foundation |
||||
QuartzCore |
||||
UIKit) |
||||
else() |
||||
list(APPEND _SDL2_FRAMEWORKS |
||||
Carbon |
||||
Cocoa |
||||
CoreAudio |
||||
CoreVideo |
||||
ForceFeedback |
||||
IOKit) |
||||
endif() |
||||
set(_SDL2_FRAMEWORK_LIBRARIES ) |
||||
foreach(framework ${_SDL2_FRAMEWORKS}) |
||||
find_library(_SDL2_${framework}_LIBRARY ${framework}) |
||||
mark_as_advanced(_SDL2_${framework}_LIBRARY) |
||||
list(APPEND _SDL2_FRAMEWORK_LIBRARIES ${_SDL2_${framework}_LIBRARY}) |
||||
list(APPEND _SDL2_FRAMEWORK_LIBRARY_NAMES _SDL2_${framework}_LIBRARY) |
||||
endforeach() |
||||
endif() |
||||
|
||||
include(FindPackageHandleStandardArgs) |
||||
find_package_handle_standard_args("SDL2" DEFAULT_MSG |
||||
${SDL2_LIBRARY_NEEDED} |
||||
${_SDL2_FRAMEWORK_LIBRARY_NAMES} |
||||
SDL2_INCLUDE_DIR) |
||||
|
||||
if(NOT TARGET SDL2::SDL2) |
||||
if(SDL2_LIBRARY_NEEDED) |
||||
add_library(SDL2::SDL2 UNKNOWN IMPORTED) |
||||
|
||||
# Work around BUGGY framework support on macOS |
||||
# https://cmake.org/Bug/view.php?id=14105 |
||||
if(CORRADE_TARGET_APPLE AND SDL2_LIBRARY_RELEASE MATCHES "\\.framework$") |
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) |
||||
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_RELEASE ${SDL2_LIBRARY_RELEASE}/SDL2) |
||||
else() |
||||
if(SDL2_LIBRARY_RELEASE) |
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE) |
||||
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_RELEASE ${SDL2_LIBRARY_RELEASE}) |
||||
endif() |
||||
|
||||
if(SDL2_LIBRARY_DEBUG) |
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG) |
||||
set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION_DEBUG ${SDL2_LIBRARY_DEBUG}) |
||||
endif() |
||||
endif() |
||||
|
||||
# Link additional `dl` and `pthread` libraries required by a static |
||||
# build of SDL on Unixy platforms (except Apple, where it is most |
||||
# probably some frameworks instead) |
||||
if(CORRADE_TARGET_UNIX AND NOT CORRADE_TARGET_APPLE AND (SDL2_LIBRARY_DEBUG MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$" OR SDL2_LIBRARY_RELEASE MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$")) |
||||
find_package(Threads REQUIRED) |
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY |
||||
INTERFACE_LINK_LIBRARIES Threads::Threads ${CMAKE_DL_LIBS}) |
||||
endif() |
||||
|
||||
# Link frameworks on macOS / iOS if we have a static SDL |
||||
if(CORRADE_TARGET_APPLE AND (SDL2_LIBRARY_DEBUG MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$" OR SDL2_LIBRARY_RELEASE MATCHES "${CMAKE_STATIC_LIBRARY_SUFFIX}$")) |
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY |
||||
INTERFACE_LINK_LIBRARIES ${_SDL2_FRAMEWORK_LIBRARIES}) |
||||
endif() |
||||
|
||||
# Windows dependencies for a static library. Unfortunately there's no |
||||
# easy way to figure out if a *.lib is static or dynamic, so we're |
||||
# adding only if a DLL is not found. |
||||
if(CORRADE_TARGET_WINDOWS AND NOT CORRADE_TARGET_WINDOWS_RT AND NOT SDL2_DLL_RELEASE AND NOT SDL2_DLL_DEBUG) |
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY INTERFACE_LINK_LIBRARIES |
||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1338 |
||||
user32 gdi32 winmm imm32 ole32 oleaut32 version uuid advapi32 setupapi shell32 |
||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1384 |
||||
dinput8) |
||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1422 |
||||
# additionally has dxerr for MSVC if DirectX SDK is not used, but |
||||
# according to https://walbourn.github.io/wheres-dxerr-lib/ this |
||||
# thing is long deprecated. |
||||
if(MINGW) |
||||
set_property(TARGET SDL2::SDL2 APPEND PROPERTY INTERFACE_LINK_LIBRARIES |
||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1386 |
||||
dxerr8 |
||||
# https://github.com/SDL-mirror/SDL/blob/release-2.0.10/CMakeLists.txt#L1388 |
||||
mingw32) |
||||
endif() |
||||
endif() |
||||
|
||||
else() |
||||
add_library(SDL2::SDL2 INTERFACE IMPORTED) |
||||
endif() |
||||
|
||||
set_property(TARGET SDL2::SDL2 PROPERTY |
||||
INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}) |
||||
endif() |
||||
|
||||
mark_as_advanced(SDL2_INCLUDE_DIR) |
||||
Loading…
Reference in new issue