Warning, /graphics/glaxnimate/cmake/modules/FindSDL2.cmake is written in an unsupported language. File is not indexed.
0001 # Copyright 2016-2020 Mattia Basaglia 0002 # 0003 # This program is free software: you can redistribute it and/or modify 0004 # it under the terms of the GNU General Public License as published by 0005 # the Free Software Foundation, either version 3 of the License, or 0006 # (at your option) any later version. 0007 # 0008 # This program is distributed in the hope that it will be useful, 0009 # but WITHOUT ANY WARRANTY; without even the implied warranty of 0010 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0011 # GNU General Public License for more details. 0012 # 0013 # You should have received a copy of the GNU General Public License 0014 # along with this program. If not, see <http://www.gnu.org/licenses/>. 0015 # 0016 # ===== 0017 # Finds the SDL2 library and various components 0018 # 0019 # Defines the following variable 0020 # SDL2_FOUND Whether the ibrary has been found 0021 # SDL2_LIBRARIES A list of linker options 0022 # SDL2_INCLUDE_DIRS A list of paths to include 0023 # SDL2_VERSION Version string in the form "major.minor.patch" 0024 # 0025 # It supports finding SDL2 components, a component is a library that follows the 0026 # following pattern: 0027 # Header in SDL2/SDL_(name).h 0028 # Library as libSDL2_(name) 0029 # 0030 # Some example of these components are SDL_image and SDL_ttf 0031 # (which would be called "image" and "ttf" respectively) 0032 # 0033 # The component "main" links to SDLMain. 0034 0035 # Like find_path() buth tailored to work with SDL2 include paths 0036 function(sdl2_find_include_path output_var header_name) 0037 find_path(${output_var}_tmp ${header_name} 0038 HINTS 0039 ENV SDL2DIR 0040 PATH_SUFFIXES include/SDL2 include 0041 PATHS 0042 ~/Library/Frameworks 0043 /Library/Frameworks 0044 /usr/local/include/SDL2 0045 /usr/include/SDL2 0046 /sw # Fink 0047 /opt/local # DarwinPorts 0048 /opt/csw # Blastwave 0049 /opt 0050 ) 0051 set(${output_var} ${${output_var}_tmp} PARENT_SCOPE) 0052 endfunction() 0053 0054 # Like find_library() but tailored to work with SDL2 libraries 0055 function(sdl2_find_library output_var lib_name) 0056 find_library(${output_var}_tmp 0057 NAMES ${lib_name} 0058 HINTS 0059 ENV SDL2DIR 0060 PATH_SUFFIXES lib64 lib 0061 PATHS 0062 /sw 0063 /opt/local 0064 /opt/csw 0065 /opt 0066 ) 0067 set(${output_var} ${${output_var}_tmp} PARENT_SCOPE) 0068 endfunction() 0069 0070 # Helper function to parse version macros from a header 0071 # Arguments: 0072 # header_path: Full path to the header file to parse 0073 # macro_prefix: Prefix of the _MAJOR_VERSION macro and friends 0074 # output_var: Variable to store the version insto 0075 function(sdl2_parse_version header_path macro_prefix output_var) 0076 if(EXISTS ${header_path}) 0077 file(STRINGS ${header_path} SDL2_COMP_VERSION_MAJOR_LINE REGEX "^#define[ \t]+${macro_prefix}_MAJOR_VERSION[ \t]+[0-9]+$") 0078 file(STRINGS ${header_path} SDL2_COMP_VERSION_MINOR_LINE REGEX "^#define[ \t]+${macro_prefix}_MINOR_VERSION[ \t]+[0-9]+$") 0079 file(STRINGS ${header_path} SDL2_COMP_VERSION_PATCH_LINE REGEX "^#define[ \t]+${macro_prefix}_PATCHLEVEL[ \t]+[0-9]+$") 0080 string(REGEX REPLACE "^#define[ \t]+${macro_prefix}_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_COMP_VERSION_MAJOR "${SDL2_COMP_VERSION_MAJOR_LINE}") 0081 string(REGEX REPLACE "^#define[ \t]+${macro_prefix}_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_COMP_VERSION_MINOR "${SDL2_COMP_VERSION_MINOR_LINE}") 0082 string(REGEX REPLACE "^#define[ \t]+${macro_prefix}_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_COMP_VERSION_PATCH "${SDL2_COMP_VERSION_PATCH_LINE}") 0083 set(${output_var} ${SDL2_COMP_VERSION_MAJOR}.${SDL2_COMP_VERSION_MINOR}.${SDL2_COMP_VERSION_PATCH} PARENT_SCOPE) 0084 endif() 0085 endfunction() 0086 0087 # Helper function to find SDL2 components 0088 # Outputs the given variables (all uppercase): 0089 # SDL2_(ID)_FOUND (Boolean, whether the component has been found) 0090 # SDL2_(ID)_VERSION (String, the detected version as "major.minor.patch") 0091 # SDL2_(ID)_INCLUDE_DIRS (Cached, List of paths to include) 0092 # SDL2_(ID)_LIBRARIES (Cached, List of libraries to include) 0093 function(sdl2_find_component SDL2_COMPONENT_ID) 0094 set(SDL2_VARPREFIX "SDL2_${SDL2_COMPONENT_ID}") 0095 set(SDL2_COMPONENT_HEADER "SDL_${SDL2_COMPONENT_ID}.h") 0096 0097 sdl2_find_include_path(${SDL2_VARPREFIX}_INCLUDE_DIR ${SDL2_COMPONENT_HEADER}) 0098 sdl2_find_library(${SDL2_VARPREFIX}_LIBRARY "SDL2_${SDL2_COMPONENT_ID}") 0099 0100 set(SDL2_COMPONENT_HEADER_PATH "${${SDL2_VARPREFIX}_INCLUDE_DIR}/${SDL2_COMPONENT_HEADER}") 0101 0102 if(${SDL2_VARPREFIX}_INCLUDE_DIR) 0103 string(TOUPPER "SDL_${SDL2_COMPONENT_ID}" SDL2_COMPONENT_MACRO) 0104 sdl2_parse_version(${SDL2_COMPONENT_HEADER_PATH} ${SDL2_COMPONENT_MACRO} "${SDL2_VARPREFIX}_VERSION") 0105 set("${SDL2_VARPREFIX}_VERSION" ${${SDL2_VARPREFIX}_VERSION} PARENT_SCOPE) 0106 endif() 0107 0108 if(${SDL2_VARPREFIX}_LIBRARY AND ${SDL2_VARPREFIX}_INCLUDE_DIR) 0109 set("${SDL2_VARPREFIX}_LIBRARIES" ${${SDL2_VARPREFIX}_LIBRARY} PARENT_SCOPE) 0110 set("${SDL2_VARPREFIX}_INCLUDE_DIRS" ${${SDL2_VARPREFIX}_INCLUDE_DIR} PARENT_SCOPE) 0111 set("${SDL2_VARPREFIX}_FOUND" ON PARENT_SCOPE) 0112 else() 0113 set("${SDL2_VARPREFIX}_FOUND" OFF PARENT_SCOPE) 0114 endif() 0115 endfunction() 0116 0117 # Find the library proper 0118 set(SDL2_INCLUDE_DIRS "") 0119 sdl2_find_include_path(SDL2_INCLUDE_DIR SDL.h) 0120 list(APPEND SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) 0121 sdl2_parse_version("${SDL2_INCLUDE_DIR}/SDL_version.h" "SDL" SDL2_VERSION) 0122 0123 set(SDL2_LIBRARIES "") 0124 sdl2_find_library(SDL2_LIBRARY SDL2) 0125 0126 # Link extra libraries 0127 if(SDL2_LIBRARY) 0128 list(APPEND SDL2_LIBRARIES ${SDL2_LIBRARY}) 0129 0130 # On OS X, SDL needs to link against the Cocoa framework, 0131 # on other systems, it needs to link against the threading library 0132 if(NOT APPLE) 0133 find_package(Threads) 0134 list(APPEND SDL2_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) 0135 else() 0136 list(APPEND SDL2_LIBRARIES "-framework Cocoa") 0137 endif() 0138 0139 # MinGW needs a few more libraries 0140 if(MINGW) 0141 list(APPEND SDL2_LIBRARIES "mingw32" "mwindows") 0142 endif() 0143 0144 endif() 0145 0146 # Search for required and optional components 0147 if(SDL2_FIND_COMPONENTS) 0148 message(STATUS "Searching SDL components:") 0149 0150 foreach(component ${SDL2_FIND_COMPONENTS}) 0151 # main is a bit special, it doesn't have a header and doesn't follow 0152 # the library naming convention 0153 # SDL2_main_FOUND is for find_package_handle_standard_args 0154 if(${component} STREQUAL "main") 0155 sdl2_find_library(SDL2MAIN_LIBRARY SDL2main) 0156 if(SDL2_LIBRARIES) 0157 list(APPEND SDL2_LIBRARIES ${SDL2MAIN_LIBRARY}) 0158 set(SDL2_main_FOUND ON) 0159 else() 0160 set(SDL2_main_FOUND OFF) 0161 endif() 0162 unset(SDL2MAIN_LIBRARY) 0163 # Other components use a helper function 0164 else() 0165 sdl2_find_component(${component}) 0166 if(SDL2_${component}_FOUND) 0167 message(STATUS " ${component} found ${SDL2_${component}_VERSION}") 0168 list(APPEND SDL2_LIBRARIES ${SDL2_${component}_LIBRARIES}) 0169 list(APPEND SDL2_INCLUDE_DIRS ${SDL2_${component}_INCLUDE_DIR}) 0170 else() 0171 message(STATUS " ${component} not found") 0172 endif() 0173 endif() 0174 endforeach() 0175 endif() 0176 0177 0178 # Handle common functionality for Find* scripts 0179 include(FindPackageHandleStandardArgs) 0180 find_package_handle_standard_args( 0181 SDL2 0182 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR 0183 VERSION_VAR SDL2_VERSION 0184 HANDLE_COMPONENTS 0185 ) 0186 0187 # Set up cached variables 0188 if(SDL2_FOUND) 0189 set(SDL2_LIBRARIES ${SDL2_LIBRARIES} CACHE STRING "Linker flags for SDL2") 0190 list(REMOVE_DUPLICATES SDL2_INCLUDE_DIRS) 0191 set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIRS} CACHE STRING "Search paths for SDL2") 0192 endif() 0193 0194 mark_as_advanced(SDL2_LIBRARIES SDL2_INCLUDE_DIRS) 0195 0196 # Clean temporaries 0197 unset(SDL2_INCLUDE_DIR) 0198 unset(SDL2_LIBRARY)