Files
CMake/Modules/FindLua50.cmake
Peter Kokot b4a08078d6 FindLua51: Use Lua51_VERSION result variable
If using both FindLua and FindLua51 modules, the FindLua51 and Lua 5.2
or newer is found, FindLua51 module can set the Lua_VERSION variable to
empty value. Instead, the Lua51_VERSION can be used to bypass this
issue.

Issue: #27088
2025-10-13 12:10:24 -04:00

152 lines
3.8 KiB
CMake

# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file LICENSE.rst or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindLua50
---------
.. note::
This module is intended specifically for Lua version branch 5.0, which is
obsolete and not maintained anymore. In new code use the latest supported
Lua version and the version-agnostic module :module:`FindLua` instead.
Finds the Lua library:
.. code-block:: cmake
find_package(Lua50 [...])
Lua is a embeddable scripting language.
When working with Lua, its library headers are intended to be included in
project source code as:
.. code-block:: c
#include <lua.h>
and not:
.. code-block:: c
#include <lua/lua.h>
This is because, the location of Lua headers may differ across platforms and may
exist in locations other than ``lua/``.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
``Lua50_FOUND``
.. versionadded:: 3.3
Boolean indicating whether Lua was found.
Cache Variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``LUA_INCLUDE_DIR``
The directory containing the Lua header files, such as ``lua.h``,
``lualib.h``, and ``lauxlib.h``, needed to use Lua.
``LUA_LIBRARIES``
Libraries needed to link against to use Lua. This list includes both ``lua``
and ``lualib`` libraries.
Deprecated Variables
^^^^^^^^^^^^^^^^^^^^
The following variables are provided for backward compatibility:
``LUA50_FOUND``
.. deprecated:: 4.2
Use ``Lua50_FOUND``, which has the same value.
Boolean indicating whether Lua was found.
Examples
^^^^^^^^
Finding the Lua 5.0 library and creating an interface :ref:`imported target
<Imported Targets>` that encapsulates its usage requirements for linking to a
project target:
.. code-block:: cmake
find_package(Lua50)
if(Lua50_FOUND AND NOT TARGET Lua50::Lua50)
add_library(Lua50::Lua50 INTERFACE IMPORTED)
set_target_properties(
Lua50::Lua50
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${LUA_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES "${LUA_LIBRARIES}"
)
endif()
target_link_libraries(project_target PRIVATE Lua50::Lua50)
See Also
^^^^^^^^
* The :module:`FindLua` module to find Lua in version-agnostic way.
#]=======================================================================]
find_path(LUA_INCLUDE_DIR lua.h
HINTS
ENV LUA_DIR
PATH_SUFFIXES lua50 lua5.0 lua5 lua
PATHS
~/Library/Frameworks
/Library/Frameworks
/opt
)
find_library(LUA_LIBRARY_lua
NAMES lua50 lua5.0 lua-5.0 lua5 lua
HINTS
ENV LUA_DIR
PATH_SUFFIXES lib
PATHS
~/Library/Frameworks
/Library/Frameworks
/opt
)
# In an OS X framework, lualib is usually included as part of the framework
# (like GLU in OpenGL.framework)
if(${LUA_LIBRARY_lua} MATCHES "framework")
set( LUA_LIBRARIES "${LUA_LIBRARY_lua}" CACHE STRING "Lua framework")
else()
find_library(LUA_LIBRARY_lualib
NAMES lualib50 lualib5.0 lualib5 lualib
HINTS
ENV LUALIB_DIR
ENV LUA_DIR
PATH_SUFFIXES lib
PATHS
/opt
)
if(LUA_LIBRARY_lualib AND LUA_LIBRARY_lua)
# include the math library for Unix
if(UNIX AND NOT APPLE)
find_library(MATH_LIBRARY_FOR_LUA m)
set( LUA_LIBRARIES "${LUA_LIBRARY_lualib};${LUA_LIBRARY_lua};${MATH_LIBRARY_FOR_LUA}" CACHE STRING "This is the concatenation of lua and lualib libraries")
# For Windows and Mac, don't need to explicitly include the math library
else()
set( LUA_LIBRARIES "${LUA_LIBRARY_lualib};${LUA_LIBRARY_lua}" CACHE STRING "This is the concatenation of lua and lualib libraries")
endif()
endif()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Lua50 DEFAULT_MSG LUA_LIBRARIES LUA_INCLUDE_DIR)
mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARIES)