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