FindLuaTest.cmake 2.7 KB

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