summaryrefslogtreecommitdiff
path: root/src/contrib/SDL-3.2.20/cmake/android/FindSdlAndroidPlatform.cmake
blob: fbe53c3094ad8203cd2750d44607651614f37ef5 (plain)
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
120
121
122
123
124
#[=======================================================================[

FindSdlAndroidPlatform
----------------------

Locate the Android SDK platform.


Imported targets
^^^^^^^^^^^^^^^^

This module defines the following :prop_tgt:`IMPORTED` target(s):

<none>

Result variables
^^^^^^^^^^^^^^^^

This find module will set the following variables in your project:

`` SdlAndroidPlatform_FOUND
   if false, no Android platform has been found

`` SDL_ANDROID_PLATFORM_ROOT
   path of the Android SDK platform root directory if found

`` SDL_ANDROID_PLATFORM_ANDROID_JAR
   path of the Android SDK platform jar file if found

`` SDL_ANDROID_PLATFORM_VERSION
   the human-readable string containing the android platform version if found

Cache variables
^^^^^^^^^^^^^^^

These variables may optionally be set to help this module find the correct files:

``SDL_ANDROID_PLATFORM_ROOT``
  path of the Android SDK platform root directory


Variables for locating Android platform
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This module responds to the flags:

``SDL_ANDROID_HOME
    First, this module will look for platforms in this CMake variable.

``ANDROID_HOME
    If no platform was found in `SDL_ANDROID_HOME`, then try `ANDROID_HOME`.

``$ENV{ANDROID_HOME}
    If no platform was found in neither `SDL_ANDROID_HOME` or `ANDROID_HOME`, then try `ANDROID_HOME}`

#]=======================================================================]

cmake_minimum_required(VERSION 3.7...3.28)

if(NOT PROJECT_NAME MATCHES "^SDL.*")
    message(WARNING "This module is internal to SDL and is currently not supported.")
endif()

function(_sdl_is_valid_android_platform_root RESULT VERSION PLATFORM_ROOT)
    set(result FALSE)
    set(version -1)

    string(REGEX MATCH "/android-([0-9]+)$" root_match "${PLATFORM_ROOT}")
    if(root_match AND EXISTS "${PLATFORM_ROOT}/android.jar")
        set(result TRUE)
        set(version "${CMAKE_MATCH_1}")
    endif()

    set(${RESULT} ${result} PARENT_SCOPE)
    set(${VERSION} ${version} PARENT_SCOPE)
endfunction()

function(_sdl_find_android_platform_root ROOT)
  cmake_parse_arguments(sfapr "" "" "" ${ARGN})
  set(homes ${SDL_ANDROID_HOME} ${ANDROID_HOME} $ENV{ANDROID_HOME})
  set(root ${ROOT}-NOTFOUND)
  foreach(home IN LISTS homes)
    if(NOT IS_DIRECTORY "${home}")
      continue()
    endif()
    file(GLOB platform_roots LIST_DIRECTORIES true "${home}/platforms/*")
    set(max_platform_version -1)
    set(max_platform_root "")
    foreach(platform_root IN LISTS platform_roots)
      _sdl_is_valid_android_platform_root(is_valid platform_version "${platform_root}")
      if(is_valid AND platform_version GREATER max_platform_version)
        set(max_platform_version "${platform_version}")
        set(max_platform_root "${platform_root}")
      endif()
    endforeach()
    if(max_platform_version GREATER -1)
      set(root ${max_platform_root})
      break()
    endif()
  endforeach()
  set(${ROOT} ${root} PARENT_SCOPE)
endfunction()

set(SDL_ANDROID_PLATFORM_ANDROID_JAR "SDL_ANDROID_PLATFORM_ANDROID_JAR-NOTFOUND")

if(NOT DEFINED SDL_ANDROID_PLATFORM_ROOT)
  _sdl_find_android_platform_root(_new_sdl_android_platform_root)
  set(SDL_ANDROID_PLATFORM_ROOT "${_new_sdl_android_platform_root}" CACHE PATH "Path of Android platform")
  unset(_new_sdl_android_platform_root)
endif()
if(SDL_ANDROID_PLATFORM_ROOT)
  _sdl_is_valid_android_platform_root(_valid SDL_ANDROID_PLATFORM_VERSION "${SDL_ANDROID_PLATFORM_ROOT}")
  if(_valid)
    set(SDL_ANDROID_PLATFORM_ANDROID_JAR "${SDL_ANDROID_PLATFORM_ROOT}/android.jar")
  endif()
  unset(_valid)
endif()

include(FindPackageHandleStandardArgs)

find_package_handle_standard_args(SdlAndroidPlatform
  VERSION_VAR SDL_ANDROID_PLATFORM_VERSION
  REQUIRED_VARS SDL_ANDROID_PLATFORM_ROOT SDL_ANDROID_PLATFORM_ANDROID_JAR
)