1unset(VERSION)
2
3# Ignore all default paths for this test to avoid finding system Lua
4set(CMAKE_INCLUDE_PATH )
5set(CMAKE_PREFIX_PATH )
6set(CMAKE_FRAMEWORK_PATH )
7
8set(ENV{CMAKE_INCLUDE_PATH} )
9set(ENV{CMAKE_PREFIX_PATH} )
10set(ENV{CMAKE_FRAMEWORK_PATH} )
11
12set(ENV{PATH} )
13set(ENV{INCLUDE} )
14
15set(CMAKE_SYSTEM_INCLUDE_PATH )
16set(CMAKE_SYSTEM_PREFIX_PATH )
17set(CMAKE_SYSTEM_FRAMEWORK_PATH )
18
19function(require_found path version)
20    find_package(Lua ${VERSION} QUIET)
21    if(NOT "${LUA_INCLUDE_DIR}" STREQUAL "${path}")
22        message(FATAL_ERROR "LUA_INCLUDE_PATH != path: '${LUA_INCLUDE_DIR}' != '${path}'")
23    endif()
24    if(NOT LUA_VERSION_STRING MATCHES "^${version}\.[0-9]$")
25        message(FATAL_ERROR "Wrong versionfound in '${LUA_INCLUDE_DIR}': ${LUA_VERSION_STRING} != ${version}")
26    endif()
27endfunction()
28
29# Use functions for scoping and better error messages
30function(require_find path version)
31    unset(LUA_INCLUDE_DIR CACHE)
32    require_found(${lua_path} ${version})
33endfunction()
34
35function(test_prefix_path path lua_path version)
36    set(CMAKE_PREFIX_PATH ${path})
37    require_find(lua_path ${version})
38endfunction()
39
40function(test_include_path path lua_path version)
41    set(CMAKE_INCLUDE_PATH ${path})
42    require_find(lua_path  ${version})
43endfunction()
44
45function(test_env_path path lua_path version)
46    set(ENV{LUA_DIR} ${path})
47    require_find(lua_path  ${version})
48    unset(ENV{LUA_DIR})
49endfunction()
50
51function(test_path prefix_path lua_path version)
52    # Shortcut: Make paths relative to current list dir
53    set(prefix_path ${CMAKE_CURRENT_LIST_DIR}/${prefix_path})
54    set(lua_path ${CMAKE_CURRENT_LIST_DIR}/${lua_path})
55
56    test_prefix_path(${prefix_path} ${lua_path} ${version})
57    test_include_path(${prefix_path}/include ${lua_path}  ${version})
58    test_env_path(${prefix_path} ${lua_path}  ${version})
59endfunction()
60
61# Simple test
62test_path(prefix1 prefix1/include 5.3)
63# Find highest version
64test_path(prefix2 prefix2/include/lua5.3 5.3)
65foreach(ver 5.3 5.2 5.1)
66    # At least X or X.0 -> Highest
67    set(VERSION "${ver}")
68    test_path(prefix2 prefix2/include/lua5.3 5.3)
69    set(VERSION "${ver}.0")
70    test_path(prefix2 prefix2/include/lua5.3 5.3)
71    # Exactly X/X.0
72    set(VERSION "${ver}" EXACT)
73    test_path(prefix2 prefix2/include/lua${ver} ${ver})
74    set(VERSION "${ver}.0" EXACT)
75    test_path(prefix2 prefix2/include/lua${ver} ${ver})
76endforeach()
77
78# Find unknown version
79set(VERSION "5.9")
80test_path(prefix2 prefix2/include/lua5.9 5.9)
81set(VERSION "5.9" EXACT)
82test_path(prefix2 prefix2/include/lua5.9 5.9)
83
84# Set LUA_INCLUDE_DIR (non-cache) to unsuitable version
85set(LUA_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/prefix2/include/lua5.2)
86set(VERSION "5.1" EXACT)
87test_path(prefix2 prefix2/include/lua5.1 5.1)
88