Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/presentation3/cmake/tools/FindLua.cmake @ 7139

Last change on this file since 7139 was 7139, checked in by rgrieder, 14 years ago

Moved non-config CMake files from cmake to cmake/tools.
That should make it easier to keep actual configuration files apart from helper files.

  • Property svn:eol-style set to native
File size: 6.6 KB
Line 
1 #
2 #             ORXONOX - the hottest 3D action shooter ever to exist
3 #                             > www.orxonox.net <
4 #
5 #        This program is free software; you can redistribute it and/or
6 #         modify it under the terms of the GNU General Public License
7 #        as published by the Free Software Foundation; either version 2
8 #            of the License, or (at your option) any later version.
9 #
10 #       This program is distributed in the hope that it will be useful,
11 #        but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 #                 GNU General Public License for more details.
14 #
15 #   You should have received a copy of the GNU General Public License along
16 #      with this program; if not, write to the Free Software Foundation,
17 #     Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18 #
19 #
20 #  Author:
21 #    Reto Grieder
22 #  Description:
23 #    Finds either Lua 5.0 or Lua 5.1 on the system. The script regards the
24 #    VERSION, EXACT, REQUIRED and QUIET arguments. A note about the EXACT
25 #    argument: EXACT 5 will match all Lua 5 versions.
26 #    When the search was successful, the following variables are set:
27 #    LUA_INCLUDE_DIR, LUA_LIBRARIES, LUA_VERSION, LUA_FOUND
28 #
29
30INCLUDE(CompareVersionStrings)
31INCLUDE(FindPackageHandleAdvancedArgs)
32INCLUDE(HandleLibraryTypes)
33
34# Macro that determines Lua version. Should work for versions 2.2 and above (current release: 5.1.4)
35FUNCTION(DETERMINE_LUA_VERSION _file _varname)
36  IF(EXISTS ${_file})
37    FILE(STRINGS ${_file} _file_content REGEX "LUA_VERSION|LUA_RELEASE")
38  ELSE()
39    SET(${_varname} "0" PARENT_SCOPE)
40    RETURN()
41  ENDIF()
42  STRING(REGEX REPLACE "^.*LUA_RELEASE[ \t]+\"Lua[ \t]+([.0-9]+)\".*$" "\\1" ${_varname} "${_file_content}")
43  IF(${_varname} STREQUAL "${_file_content}")
44    # At most version 5.1.0
45    STRING(REGEX REPLACE "^.*LUA_VERSION[ \t]+\"Lua[ \t]+([.0-9]+)\".*$" "\\1" ${_varname} "${_file_content}")
46    IF(${_varname} STREQUAL "${_file_content}")
47      MESSAGE(FATAL_ERROR "Could not determine Lua version which means this script has a bug")
48    ENDIF()
49    IF(${_varname} MATCHES "^[0-9]+\\.[0-9]+$")
50      SET(${_varname} "${${_varname}}.0") # E.g. "3.2" is "3.2.0" actually
51    ENDIF()
52  ENDIF()
53  SET(${_varname} "${${_varname}}" PARENT_SCOPE)
54ENDFUNCTION(DETERMINE_LUA_VERSION)
55
56
57# Find Lua 5.1
58FIND_PATH(LUA_5.1_INCLUDE_DIR lua.h
59  PATHS $ENV{LUA_DIR}
60  PATH_SUFFIXES include/lua51 include/lua5.1 include/lua include
61)
62IF(LUA_5.1_INCLUDE_DIR)
63  DETERMINE_LUA_VERSION(${LUA_5.1_INCLUDE_DIR}/lua.h LUA_5.1_VERSION)
64  COMPARE_VERSION_STRINGS("${LUA_5.1_VERSION}" "5.1" _version_compare TRUE)
65  IF(NOT _version_compare EQUAL 0)
66    # Incorrect version found, abort search
67    SET(LUA_5.1_INCLUDE_DIR "LUA_5.1_INCLUDE_DIR-NOTFOUND" CACHE PATH "" FORCE)
68  ELSE()
69    FIND_LIBRARY(LUA_5.1_LIBRARY_OPTIMIZED
70      NAMES lua51 lua5.1 lua
71      PATHS $ENV{LUA_DIR}
72      PATH_SUFFIXES lib64 lib
73    )
74    FIND_LIBRARY(LUA_5.1_LIBRARY_DEBUG
75      NAMES lua51d lua51_d lua5.1d lua5.1_d luad lua_d
76            lua51D lua51_D lua5.1D lua5.1_D luad lua_D
77      PATHS $ENV{LUA_DIR}
78      PATH_SUFFIXES lib64 lib
79    )
80    HANDLE_LIBRARY_TYPES(LUA_5.1)
81    SET(LUA_5.1_LIBRARIES ${LUA_5.1_LIBRARY})
82    IF(LUA_5.1_LIBRARIES)
83      SET(LUA_5.1_FOUND TRUE)
84    ENDIF()
85  ENDIF(NOT _version_compare EQUAL 0)
86ENDIF(LUA_5.1_INCLUDE_DIR)
87
88
89# Find Lua 5.0
90FIND_PATH(LUA_5.0_INCLUDE_DIR lua.h
91  PATHS $ENV{LUA_DIR}
92  PATH_SUFFIXES include/lua50 include/lua5.0 include/lua5 include/lua include
93)
94IF(LUA_5.0_INCLUDE_DIR)
95  DETERMINE_LUA_VERSION(${LUA_5.0_INCLUDE_DIR}/lua.h LUA_5.0_VERSION)
96  COMPARE_VERSION_STRINGS("${LUA_5.0_VERSION}" "5.0" _version_compare TRUE)
97  IF(NOT _version_compare EQUAL 0)
98    # Incorrect version found, abourt search
99    SET(LUA_5.0_INCLUDE_DIR "LUA_5.0_INCLUDE_DIR-NOTFOUND" CACHE PATH "" FORCE)
100  ELSE()
101    FIND_LIBRARY(LUA_5.0_LUA_LIBRARY_OPTIMIZED
102      NAMES lua50 lua5.0 lua5 lua
103      PATHS $ENV{LUA_DIR}
104      PATH_SUFFIXES lib64 lib
105    )
106    FIND_LIBRARY(LUA_5.0_LUA_LIBRARY_DEBUG
107      NAMES lua50d lua50_d lua5.0d lua5.0_d lua5d lua5_d luad lua_d
108            lua50D lua50_D lua5.0D lua5.0_D lua5d lua5_D luaD lua_D
109      PATHS $ENV{LUA_DIR}
110      PATH_SUFFIXES lib64 lib
111    )
112    HANDLE_LIBRARY_TYPES(LUA_5.0_LUA)
113
114    # In an OS X framework, lualib is usually included as part of the framework
115    # (like GLU in OpenGL.framework)
116    IF(${LUA_5.0_LUA_LIBRARY} MATCHES "framework")
117      SET(LUA_5.0_LIBRARIES ${LUA_5.0_LUA_LIBRARY})
118    ELSE()
119      FIND_LIBRARY(LUA_5.0_LUALIB_LIBRARY_OPTIMIZED
120        NAMES lualib50 lualib5.0 lualib5 lualib
121        PATHS $ENV{LUALIB_DIR} $ENV{LUA_DIR}
122        PATH_SUFFIXES lib64 lib
123      )
124      FIND_LIBRARY(LUA_5.0_LUALIB_LIBRARY_DEBUG
125        NAMES lualib50d lualib50_d lualib5.0d lualib5.0_d
126              lualib5d lualib5_d lualibd lualib_d
127              lualib50D lualib50_D lualib5.0D lualib5.0_D
128              lualib5D lualib5_D lualibD lualib_D
129        PATHS $ENV{LUALIB_DIR} $ENV{LUA_DIR}
130        PATH_SUFFIXES lib64 lib
131      )
132      HANDLE_LIBRARY_TYPES(LUA_5.0_LUALIB)
133      # Both libraries are required for Lua 5.0 to be found
134      IF(LUA_5.0_LUA_LIBRARY AND LUA_5.0_LUALIB_LIBRARY)
135        SET(LUA_5.0_LIBRARIES ${LUA_5.0_LUA_LIBRARY} ${LUA_5.0_LUALIB_LIBRARY})
136      ENDIF()
137    ENDIF(${LUA_5.0_LUA_LIBRARY} MATCHES "framework")
138
139    IF(LUA_5.0_LIBRARIES)
140      SET(LUA_5.0_FOUND TRUE)
141    ENDIF()
142  ENDIF(NOT _version_compare EQUAL 0)
143ENDIF(LUA_5.0_INCLUDE_DIR)
144
145# Pick the right version
146IF(Lua_FIND_VERSION_EXACT AND NOT Lua_FIND_VERSION MATCHES "^[0-9]*$")
147  STRING(REGEX REPLACE "^([0-9]+\\.[0-9]+)(\\..*)?$" "\\1" LUA_VERSION_SELECTION ${Lua_FIND_VERSION})
148ELSE()
149  IF(LUA_5.1_FOUND) # Prefer version 5.1 if found
150    SET(LUA_VERSION_SELECTION "5.1")
151  ELSEIF(LUA_5.0_FOUND)
152    SET(LUA_VERSION_SELECTION "5.0")
153  ENDIF()
154ENDIF()
155
156SET(LUA_INCLUDE_DIR "${LUA_${LUA_VERSION_SELECTION}_INCLUDE_DIR}")
157SET(LUA_LIBRARIES "${LUA_${LUA_VERSION_SELECTION}_LIBRARIES}")
158SET(LUA_VERSION_LONG "${LUA_${LUA_VERSION_SELECTION}_VERSION}")
159SET(LUA_VERSION "${LUA_VERSION_SELECTION}")
160
161FIND_PACKAGE_HANDLE_ADVANCED_ARGS(Lua DEFAULT_MSG "${LUA_VERSION_LONG}"
162  LUA_LIBRARIES
163  LUA_INCLUDE_DIR
164)
165
166# Include the math library for Unix only
167IF(LUA_FOUND)
168  IF(UNIX AND NOT APPLE)
169    FIND_LIBRARY(UNIX_MATH_LIBRARY m)
170    SET(LUA_LIBRARIES ${LUA_LIBRARIES} ${UNIX_MATH_LIBRARY})
171  ENDIF()
172ENDIF(LUA_FOUND)
173
174MARK_AS_ADVANCED(
175  LUA_5.0_INCLUDE_DIR
176  LUA_5.0_LUA_LIBRARY_OPTIMIZED
177  LUA_5.0_LUA_LIBRARY_DEBUG
178  LUA_5.0_LUALIB_LIBRARY_OPTIMIZED
179  LUA_5.0_LUALIB_LIBRARY_DEBUG
180  LUA_5.1_INCLUDE_DIR
181  LUA_5.1_LIBRARY_OPTIMIZED
182  LUA_5.1_LIBRARY_DEBUG
183  UNIX_MATH_LIBRARY
184)
Note: See TracBrowser for help on using the repository browser.