| unset(VERSION) | |
| # Ignore all default paths for this test to avoid finding system Lua | |
| set(CMAKE_INCLUDE_PATH ) | |
| set(CMAKE_PREFIX_PATH ) | |
| set(CMAKE_FRAMEWORK_PATH ) | |
| set(ENV{CMAKE_INCLUDE_PATH} ) | |
| set(ENV{CMAKE_PREFIX_PATH} ) | |
| set(ENV{CMAKE_FRAMEWORK_PATH} ) | |
| set(ENV{PATH} ) | |
| set(ENV{INCLUDE} ) | |
| set(CMAKE_SYSTEM_INCLUDE_PATH ) | |
| set(CMAKE_SYSTEM_PREFIX_PATH ) | |
| set(CMAKE_SYSTEM_FRAMEWORK_PATH ) | |
| function(require_found path version) | |
| find_package(Lua ${VERSION} QUIET) | |
| if(NOT "${LUA_INCLUDE_DIR}" STREQUAL "${path}") | |
| message(FATAL_ERROR "LUA_INCLUDE_PATH != path: '${LUA_INCLUDE_DIR}' != '${path}'") | |
| endif() | |
| if(NOT LUA_VERSION_STRING MATCHES "^${version}\.[0-9]$") | |
| message(FATAL_ERROR "Wrong versionfound in '${LUA_INCLUDE_DIR}': ${LUA_VERSION_STRING} != ${version}") | |
| endif() | |
| endfunction() | |
| # Use functions for scoping and better error messages | |
| function(require_find path version) | |
| unset(LUA_INCLUDE_DIR CACHE) | |
| require_found(${lua_path} ${version}) | |
| endfunction() | |
| function(test_prefix_path path lua_path version) | |
| set(CMAKE_PREFIX_PATH ${path}) | |
| require_find(lua_path ${version}) | |
| endfunction() | |
| function(test_include_path path lua_path version) | |
| set(CMAKE_INCLUDE_PATH ${path}) | |
| require_find(lua_path ${version}) | |
| endfunction() | |
| function(test_env_path path lua_path version) | |
| set(ENV{LUA_DIR} ${path}) | |
| require_find(lua_path ${version}) | |
| unset(ENV{LUA_DIR}) | |
| endfunction() | |
| function(test_path prefix_path lua_path version) | |
| # Shortcut: Make paths relative to current list dir | |
| set(prefix_path ${CMAKE_CURRENT_LIST_DIR}/${prefix_path}) | |
| set(lua_path ${CMAKE_CURRENT_LIST_DIR}/${lua_path}) | |
| test_prefix_path(${prefix_path} ${lua_path} ${version}) | |
| test_include_path(${prefix_path}/include ${lua_path} ${version}) | |
| test_env_path(${prefix_path} ${lua_path} ${version}) | |
| endfunction() | |
| # Simple test | |
| test_path(prefix1 prefix1/include 5.3) | |
| # Find highest version | |
| test_path(prefix2 prefix2/include/lua5.3 5.3) | |
| foreach(ver 5.3 5.2 5.1) | |
| # At least X or X.0 -> Highest | |
| set(VERSION "${ver}") | |
| test_path(prefix2 prefix2/include/lua5.3 5.3) | |
| set(VERSION "${ver}.0") | |
| test_path(prefix2 prefix2/include/lua5.3 5.3) | |
| # Exactly X/X.0 | |
| set(VERSION "${ver}" EXACT) | |
| test_path(prefix2 prefix2/include/lua${ver} ${ver}) | |
| set(VERSION "${ver}.0" EXACT) | |
| test_path(prefix2 prefix2/include/lua${ver} ${ver}) | |
| endforeach() | |
| # Find unknown version | |
| set(VERSION "5.9") | |
| test_path(prefix2 prefix2/include/lua5.9 5.9) | |
| set(VERSION "5.9" EXACT) | |
| test_path(prefix2 prefix2/include/lua5.9 5.9) | |
| # Set LUA_INCLUDE_DIR (non-cache) to unsuitable version | |
| set(LUA_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/prefix2/include/lua5.2) | |
| set(VERSION "5.1" EXACT) | |
| test_path(prefix2 prefix2/include/lua5.1 5.1) |