Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/forks/sandbox/cmake/FindLua.cmake @ 9651

Last change on this file since 9651 was 2710, checked in by rgrieder, 16 years ago

Merged buildsystem3 containing buildsystem2 containing Adi's buildsystem branch back to the trunk.
Please update the media directory if you were not using buildsystem3 before.

  • 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.