create regress_simple for JavaScript
[liba.git] / lua / src / CMakeLists.txt
blob7ab03c07d36e62f3a8575a60334b1f93f695ec32
1 cmake_minimum_required(VERSION 2.8.12...4.0)
2 project(lua C)
4 file(GLOB LUA_H lua.h src/lua.h)
5 file(STRINGS "${LUA_H}" VERSION REGEX "^#define[ \t]+LUA_(RELEASE[ \t]+\"Lua [0-9]|VERSION([ \t]+\"Lua [0-9]|_[MR])).*")
6 string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MAJOR[^0-9]+([0-9]+)[^;]*;.*" "\\1" LUA_VERSION_MAJOR ";${VERSION};")
7 if(LUA_VERSION_MAJOR MATCHES "^[0-9]+$")
8   string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_MINOR[^0-9]+([0-9]+)[^;]*;.*" "\\1" LUA_VERSION_MINOR ";${VERSION};")
9   string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION_RELEASE[^0-9(]+([0-9]+)[^;]*;.*" "\\1" LUA_VERSION_PATCH ";${VERSION};")
10   set(LUA_RELEASE "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}.${LUA_VERSION_PATCH}")
11 else()
12   string(REGEX REPLACE ".*;#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_RELEASE ";${VERSION};")
13   if(NOT LUA_RELEASE MATCHES "^[0-9.]+$")
14     string(REGEX REPLACE ".*;#define[ \t]+LUA_VERSION[ \t]+\"Lua ([0-9.]+)\"[ \t]*;.*" "\\1" LUA_RELEASE ";${VERSION};")
15   endif()
16   string(REGEX MATCHALL "[0-9]+" VERSION "${LUA_RELEASE}.0.0.0")
17   list(GET VERSION 0 LUA_VERSION_MAJOR)
18   list(GET VERSION 1 LUA_VERSION_MINOR)
19   list(GET VERSION 2 LUA_VERSION_PATCH)
20 endif()
21 set(LUA_VERSION "${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
23 set(PROJECT_VERSION ${LUA_RELEASE})
24 set(PROJECT_VERSION_MAJOR ${LUA_VERSION_MAJOR})
25 set(PROJECT_VERSION_MINOR ${LUA_VERSION_MINOR})
26 set(PROJECT_VERSION_PATCH ${LUA_VERSION_PATCH})
27 set(PROJECT_DESCRIPTION "A powerful, efficient, lightweight, embeddable scripting language.")
28 set(PROJECT_HOMEPAGE_URL "http://www.lua.org")
29 set(CMAKE_C_EXTENSIONS 1)
30 set(CMAKE_C_STANDARD 99)
32 if(LUA_STATIC)
33   list(REMOVE_ITEM CMAKE_FIND_LIBRARY_PREFIXES "${CMAKE_STATIC_LIBRARY_PREFIX}")
34   list(REMOVE_ITEM CMAKE_FIND_LIBRARY_SUFFIXES "${CMAKE_STATIC_LIBRARY_SUFFIX}")
35   list(INSERT CMAKE_FIND_LIBRARY_PREFIXES 0 "${CMAKE_STATIC_LIBRARY_PREFIX}")
36   list(INSERT CMAKE_FIND_LIBRARY_SUFFIXES 0 "${CMAKE_STATIC_LIBRARY_SUFFIX}")
37 endif()
39 option(LUA_IPO "Enable/Disable interprocedural optimization" 0)
40 if(NOT CMAKE_VERSION VERSION_LESS 3.9 AND LUA_IPO)
41   cmake_policy(SET CMP0069 NEW)
42   include(CheckIPOSupported)
43   check_ipo_supported(RESULT LUA_IPO)
44 endif()
46 if(DEFINED ENV{ANDROID_ROOT} AND EXISTS $ENV{ANDROID_ROOT})
47   option(LUA_PIE "Enable/Disable position independent code" 1)
48 else()
49   option(LUA_PIE "Enable/Disable position independent code" 0)
50 endif()
51 set(CMAKE_POSITION_INDEPENDENT_CODE ${LUA_PIE})
52 if(NOT CMAKE_VERSION VERSION_LESS 3.14)
53   cmake_policy(SET CMP0083 NEW)
54   include(CheckPIESupported)
55   check_pie_supported()
56 endif()
58 if(CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL .lib)
59   list(APPEND LUA_PRIVATE _CRT_SECURE_NO_WARNINGS)
60 endif()
61 if(NOT LUA_VERSION VERSION_LESS 5.1)
62   option(LUA_APICHECK "Enable/Disable checks on the C API" 0)
63   if(LUA_APICHECK)
64     list(APPEND LUA_PRIVATE LUA_USE_APICHECK)
65   endif()
66 else()
67   unset(LUA_APICHECK CACHE)
68 endif()
70 macro(load name text)
71   file(READ ${name} ${text})
72   file(READ ${name} ${text}_)
73 endmacro()
74 macro(save name text)
75   if(NOT ${text} STREQUAL ${text}_)
76     file(WRITE ${name} "${${text}}")
77     message(STATUS "write ${name}")
78   endif()
79   set(${text}_)
80   set(${text})
81 endmacro()
83 file(GLOB LUACONF_H luaconf.h src/luaconf.h)
84 if(EXISTS ${LUACONF_H})
85   load(${LUACONF_H} LUACONF_H_TEXT)
86   if(APPLE)
87     list(APPEND LUA_PUBLIC LUA_USE_MACOSX)
88   elseif(UNIX)
89     list(APPEND LUA_PUBLIC LUA_USE_LINUX)
90   elseif(NOT WIN32)
91     list(APPEND LUA_PUBLIC LUA_USE_POSIX)
92   endif()
93 endif()
94 option(LUA_COMPAT "Enable/Disable build lua compatibility" 0)
95 if(LUA_COMPAT)
96   if(NOT LUA_VERSION VERSION_LESS 5.4)
97     list(APPEND LUA_PUBLIC LUA_COMPAT_5_3)
98   elseif(NOT LUA_VERSION VERSION_LESS 5.3)
99     list(APPEND LUA_PUBLIC LUA_COMPAT_5_2 LUA_COMPAT_5_1)
100   elseif(NOT LUA_VERSION VERSION_LESS 5.2)
101     list(APPEND LUA_PUBLIC LUA_COMPAT_ALL)
102   endif()
103 endif()
104 string(REGEX REPLACE "#define LUA_USE_READLINE[^\n]*\n" "" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
105 if(NOT LUA_VERSION VERSION_LESS 5.1 AND LUA_VERSION VERSION_LESS 5.2 AND LUA_COMPAT)
106   string(REPLACE "#undef LUA_COMPAT_GETN" "#define LUA_COMPAT_GETN" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
107   string(REPLACE "#undef LUA_COMPAT_LOADLIB" "#define LUA_COMPAT_LOADLIB" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
108 elseif(NOT LUA_VERSION VERSION_LESS 5.1 AND LUA_VERSION VERSION_LESS 5.2)
109   string(REPLACE "#define LUA_COMPAT_GETN" "#undef LUA_COMPAT_GETN" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
110   string(REPLACE "#define LUA_COMPAT_LOADLIB" "#undef LUA_COMPAT_LOADLIB" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
111 endif()
113 if(NOT LUA_VERSION VERSION_LESS 5.3)
114   option(LUA_NOCVTN2S "Disable/Enable automatic coercion from strings to numbers" 0)
115   if(LUA_NOCVTN2S)
116     string(REGEX REPLACE "[^\n]*#define LUA_NOCVTN2S[^\n]*" "#define LUA_NOCVTN2S" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
117   else()
118     string(REGEX REPLACE "[^\n]*#define LUA_NOCVTN2S[^\n]*" "/* #define LUA_NOCVTN2S */" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
119   endif()
120   option(LUA_NOCVTS2N "Disable/Enable automatic coercion from numbers to strings" 0)
121   if(LUA_NOCVTS2N)
122     string(REGEX REPLACE "[^\n]*#define LUA_NOCVTS2N[^\n]*" "#define LUA_NOCVTS2N" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
123   else()
124     string(REGEX REPLACE "[^\n]*#define LUA_NOCVTS2N[^\n]*" "/* #define LUA_NOCVTS2N */" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
125   endif()
126 else()
127   unset(LUA_NOCVTN2S CACHE)
128   unset(LUA_NOCVTS2N CACHE)
129 endif()
131 option(LUA_32BITS "Enable/Disable build lua 32bits" 0)
132 if(LUA_32BITS)
133   string(REGEX REPLACE "[^\n]*#define LUA_32BITS[^\n]*" "#define LUA_32BITS\t1" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
134 elseif(NOT LUA_VERSION VERSION_LESS 5.4)
135   string(REGEX REPLACE "[^\n]*#define LUA_32BITS[^\n]*" "#define LUA_32BITS\t0" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
136 elseif(NOT LUA_VERSION VERSION_LESS 5.3)
137   string(REGEX REPLACE "[^\n]*#define LUA_32BITS[^\n]*" "/* #define LUA_32BITS */" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
138 endif()
139 if(LUA_VERSION VERSION_LESS 5.3 AND LUA_32BITS)
140   string(REPLACE "#define LUA_NUMBER_DOUBLE" "#define LUA_NUMBER_FLOAT" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
141   string(REGEX REPLACE "#define LUA_NUMBER([ \t]+)[^\n]*" "#define LUA_NUMBER\\1float" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
142   string(REGEX REPLACE "#define LUAI_UACNUMBER([ \t]+)[^\n]*" "#define LUAI_UACNUMBER\\1float" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
143   string(REGEX REPLACE "#define LUA_NUMBER_SCAN([ \t]+)[^\n]*" "#define LUA_NUMBER_SCAN\\1\"%f\"" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
144   string(REGEX REPLACE "#define LUA_NUMBER_FMT([ \t]+)[^\n]*" "#define LUA_NUMBER_FMT\\1\"%.7g\"" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
145   string(REGEX REPLACE "#define l_mathop\\(([^)]+)\\)([ \t]+)[^\n]*" "#define l_mathop(\\1)\\2(\\1##f)" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
146   string(REPLACE "strtod(" "strtof(" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
147 elseif(LUA_VERSION VERSION_LESS 5.3)
148   string(REPLACE "#define LUA_NUMBER_FLOAT" "#define LUA_NUMBER_DOUBLE" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
149   string(REGEX REPLACE "#define LUA_NUMBER([ \t]+)[^\n]*" "#define LUA_NUMBER\\1double" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
150   string(REGEX REPLACE "#define LUAI_UACNUMBER([ \t]+)[^\n]*" "#define LUAI_UACNUMBER\\1double" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
151   string(REGEX REPLACE "#define LUA_NUMBER_SCAN([ \t]+)[^\n]*" "#define LUA_NUMBER_SCAN\\1\"%lf\"" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
152   string(REGEX REPLACE "#define LUA_NUMBER_FMT([ \t]+)[^\n]*" "#define LUA_NUMBER_FMT\\1\"%.14g\"" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
153   string(REGEX REPLACE "#define l_mathop\\(([^)]+)\\)([ \t]+)[^\n]*" "#define l_mathop(\\1)\\2(\\1)" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
154   string(REPLACE "strtof(" "strtod(" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
155 endif()
156 if(LUA_VERSION VERSION_LESS 5.3)
157   if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND LUA_32BITS)
158     string(REGEX REPLACE "#define LUA_INTEGER([ \t]+)[^\n]*" "#define LUA_INTEGER\\1LUAI_INT32" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
159   else()
160     string(REGEX REPLACE "#define LUA_INTEGER([ \t]+)[^\n]*" "#define LUA_INTEGER\\1ptrdiff_t" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
161   endif()
162 endif()
164 if(NOT WIN32)
165   string(REGEX REPLACE "([^/\\]+)$" "\\1/" LUA_ROOT "${CMAKE_INSTALL_PREFIX}")
166   string(REGEX REPLACE "#define LUA_ROOT([ \t]+)[^\n]*" "#define LUA_ROOT\\1\"${LUA_ROOT}\"" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
167 endif()
168 if(APPLE)
169   if(NOT LUA_VERSION VERSION_LESS 5.2)
170     set(LUA_CPATH_DEFAULT ".so;\" \\\n\t\tLUA_CDIR\"?.dylib;\" LUA_CDIR\"loadall.dylib;\" \"./?.dylib\"\n")
171   else()
172     set(LUA_CPATH_DEFAULT ".so;\" \\\n\t\"./?.dylib;\" LUA_CDIR\"?.dylib;\" LUA_CDIR\"loadall.dylib\"\n")
173   endif()
174   string(REPLACE ".so\"\n" "${LUA_CPATH_DEFAULT}" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
175 endif()
177 file(GLOB LOSLIB_C loslib.c src/loslib.c)
178 if(EXISTS ${LOSLIB_C})
179   load(${LOSLIB_C} LOSLIB_C_TEXT)
180 endif()
182 if(IS_ABSOLUTE "$ENV{TMPDIR}")
183   file(TO_CMAKE_PATH "$ENV{TMPDIR}/lua_XXXXXX" LUA_TMPNAMTEMPLATE)
184 elseif(IS_ABSOLUTE "$ENV{TEMP}")
185   file(TO_CMAKE_PATH "$ENV{TEMP}/lua_XXXXXX" LUA_TMPNAMTEMPLATE)
186 elseif(IS_ABSOLUTE "$ENV{TMP}")
187   file(TO_CMAKE_PATH "$ENV{TMP}/lua_XXXXXX" LUA_TMPNAMTEMPLATE)
188 else()
189   file(TO_CMAKE_PATH "/tmp/lua_XXXXXX" LUA_TMPNAMTEMPLATE)
190 endif()
191 string(LENGTH "${LUA_TMPNAMTEMPLATE} " LUA_TMPNAMBUFSIZE)
192 if(LUA_TMPNAMBUFSIZE LESS 32)
193   set(LUA_TMPNAMBUFSIZE 32)
194 endif()
195 math(EXPR LUA_TMPNAMBUFSIZE "(7+${LUA_TMPNAMBUFSIZE})/8*8")
196 if(NOT LUA_VERSION VERSION_LESS 5.2)
197   string(REGEX REPLACE "LUA_TMPNAMBUFSIZE([ \t]+)[0-9]*\n" "LUA_TMPNAMBUFSIZE\\1${LUA_TMPNAMBUFSIZE}\n" LOSLIB_C_TEXT "${LOSLIB_C_TEXT}")
198   string(REGEX REPLACE "LUA_TMPNAMTEMPLATE([ \t]+)\"[^\"]*\"" "LUA_TMPNAMTEMPLATE\\1\"${LUA_TMPNAMTEMPLATE}\"" LOSLIB_C_TEXT "${LOSLIB_C_TEXT}")
199 else()
200   string(REGEX REPLACE "LUA_TMPNAMBUFSIZE([ \t]+)[0-9]*\n" "LUA_TMPNAMBUFSIZE\\1${LUA_TMPNAMBUFSIZE}\n" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
201   string(REGEX REPLACE "LUA_TMPNAMTEMPLATE([ \t]+)\"[^\"]*\"" "LUA_TMPNAMTEMPLATE\\1\"${LUA_TMPNAMTEMPLATE}\"" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
202 endif()
204 file(GLOB LUA_C lua.c src/lua.c)
205 if(EXISTS ${LUA_C})
206   load(${LUA_C} LUA_C_TEXT)
207 endif()
209 string(FIND "${LUA_C_TEXT}" "LUA_READLINE_C" found)
210 if(${found} EQUAL -1)
211   set(found "#include \"lua.h\"")
212   string(REPLACE "${found}" "${found}\n#if defined(LUA_READLINE_C)\n#include LUA_READLINE_C\n#endif" LUA_C_TEXT "${LUA_C_TEXT}")
213 endif()
214 string(FIND "${LUA_C_TEXT}" "lua_initreadline" found)
215 if(${found} EQUAL -1)
216   set(found "  while ((status = loadline(L)) != -1)")
217   string(REPLACE "${found}" "#if defined(lua_initreadline)\n  lua_initreadline(L);\n#endif\n${found}" LUA_C_TEXT "${LUA_C_TEXT}")
218 endif()
220 if(EXISTS ${LUA_C})
221   save(${LUA_C} LUA_C_TEXT)
222 endif()
223 if(EXISTS ${LOSLIB_C})
224   save(${LOSLIB_C} LOSLIB_C_TEXT)
225 endif()
226 if(EXISTS ${LUACONF_H})
227   save(${LUACONF_H} LUACONF_H_TEXT)
228 endif()
230 set(LUA_USER_H CACHE FILEPATH "generic extra include file")
231 function(lua_library target)
232   target_compile_definitions(${target} PUBLIC ${LUA_PUBLIC})
233   target_include_directories(${target} PUBLIC $<INSTALL_INTERFACE:include>)
234   if(EXISTS ${LUA_USER_H})
235     get_filename_component(lua_user_h ${LUA_USER_H} DIRECTORY)
236     target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${lua_user_h}>)
237     get_filename_component(lua_user_h ${LUA_USER_H} NAME)
238     target_compile_definitions(${target} PUBLIC $<BUILD_INTERFACE:LUA_USER_H="${lua_user_h}">)
239   endif()
240   if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src)
241     target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>)
242   endif()
243   if(CMAKE_C_COMPILER_ID MATCHES "TinyCC" AND CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL .lib)
244     set_target_properties(${target} PROPERTIES IMPORT_SUFFIX .def)
245   endif()
246   set_target_properties(${target} PROPERTIES POSITION_INDEPENDENT_CODE 1
247     INTERPROCEDURAL_OPTIMIZATION ${LUA_IPO}
248   )
249 endfunction()
251 if(NOT LUA_MATH_LIBRARY AND WIN32)
252   unset(LUA_MATH_LIBRARY CACHE)
253 elseif(NOT LUA_MATH_LIBRARY)
254   set(LUA_MATH_LIBRARY m)
255 endif()
257 file(GLOB LUA_C lua.c src/lua.c)
258 file(GLOB LUAC_C luac.c src/luac.c)
259 file(GLOB SOURCES *.[ch] src/*.[ch])
260 list(REMOVE_ITEM SOURCES ${LUA_C} ${LUAC_C})
262 add_library(lua.o OBJECT ${SOURCES})
263 lua_library(lua.o)
264 add_library(lualib SHARED $<TARGET_OBJECTS:lua.o>)
265 lua_library(lualib)
266 add_library(liblua STATIC $<TARGET_OBJECTS:lua.o>)
267 lua_library(liblua)
268 add_executable(lua ${LUA_C})
269 add_executable(luac ${LUAC_C})
270 target_link_libraries(lua PRIVATE lualib)
271 target_link_libraries(luac PRIVATE liblua)
272 if(WIN32)
273   set_property(TARGET lualib PROPERTY PREFIX "")
274   set_property(TARGET liblua PROPERTY PREFIX lib)
275   set(suffix ${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR})
276 else()
277   set(suffix ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
278   set_target_properties(luac lua PROPERTIES SUFFIX ${suffix})
279 endif()
280 set_property(TARGET lualib liblua PROPERTY OUTPUT_NAME lua${suffix})
281 set_property(TARGET luac lua PROPERTY INTERPROCEDURAL_OPTIMIZATION ${LUA_IPO})
282 set_property(TARGET luac lua lua.o APPEND PROPERTY COMPILE_DEFINITIONS ${LUA_PRIVATE})
283 if(WIN32)
284   set_property(TARGET lua.o APPEND PROPERTY COMPILE_DEFINITIONS LUA_BUILD_AS_DLL)
285   set_property(TARGET lualib APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS LUA_BUILD_AS_DLL)
286 endif()
287 target_link_libraries(lualib PRIVATE ${CMAKE_DL_LIBS} ${LUA_MATH_LIBRARY})
288 target_link_libraries(liblua PUBLIC ${CMAKE_DL_LIBS} ${LUA_MATH_LIBRARY})
290 include(GNUInstallDirs)
291 file(GLOB PUBLIC_HEADER ${LUA_USER_H}
292   lauxlib.h src/lauxlib.h
293   luaconf.h src/luaconf.h
294   lualib.h src/lualib.h
295   lua.h src/lua.h
296   lua.hpp src/lua.hpp etc/lua.hpp
298 set(LUA_INSTALL_CMOD ${CMAKE_INSTALL_LIBDIR}/lua/${LUA_VERSION})
299 set(LUA_INSTALL_LMOD ${CMAKE_INSTALL_DATADIR}/lua/${LUA_VERSION})
300 set(LUA_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR}/lua${LUA_VERSION})
301 install(FILES ${PUBLIC_HEADER} DESTINATION ${LUA_INCLUDE_DIR})
302 install(TARGETS lualib liblua lua luac EXPORT ${PROJECT_NAME}-targets
303   ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
304   LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
305   RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
307 install(EXPORT ${PROJECT_NAME}-targets FILE ${PROJECT_NAME}-targets.cmake
308   DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lua${LUA_VERSION}
310 include(CMakePackageConfigHelpers)
311 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake "@PACKAGE_INIT@\n"
312   "include(\"\${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake\")\n"
313   "set(LUA_INSTALL_CMOD \"\${PACKAGE_PREFIX_DIR}/@LUA_INSTALL_CMOD@\")\n"
314   "set(LUA_INSTALL_LMOD \"\${PACKAGE_PREFIX_DIR}/@LUA_INSTALL_LMOD@\")\n"
315   "set(LUA_INCLUDE_DIR \"\${PACKAGE_PREFIX_DIR}/@LUA_INCLUDE_DIR@\")\n"
316   "set(LUA_BINDIR \"\${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_BINDIR@\")\n"
317   "set(LUA_LIBDIR \"\${PACKAGE_PREFIX_DIR}/@CMAKE_INSTALL_LIBDIR@\")\n"
319 configure_package_config_file(
320   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
321   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
322   INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lua${LUA_VERSION}
324 write_basic_package_version_file(
325   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
326   VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion
328 install(FILES
329   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake
330   ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake
331   DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/lua${LUA_VERSION}
333 get_property(prop TARGET liblua PROPERTY INTERFACE_COMPILE_DEFINITIONS)
334 string(REPLACE "<BUILD_" "<INSTALL_" PC_CFLAGS "-D$<JOIN:${prop}, -D>")
335 get_property(prop TARGET liblua PROPERTY INTERFACE_LINK_LIBRARIES)
336 string(REGEX REPLACE "\\$<BUILD_INTERFACE:[^>]*>" "" prop "${prop}")
337 string(REPLACE "INSTALL_INTERFACE" "BUILD_INTERFACE" prop "${prop}")
338 string(REPLACE "-l$<JOIN:, -l>" "" PC_LDFLAGS "-l$<JOIN:${prop}, -l>")
339 file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lua${LUA_VERSION}.pc CONTENT
340 "prefix=${CMAKE_INSTALL_PREFIX}
341 exec_prefix=\${prefix}
342 libdir=\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}
343 includedir=\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}/lua${LUA_VERSION}
344 INSTALL_LMOD=\${prefix}/${CMAKE_INSTALL_DATADIR}/lua/${LUA_VERSION}
345 INSTALL_CMOD=\${prefix}/${CMAKE_INSTALL_LIBDIR}/lua/${LUA_VERSION}\n
346 Name: ${PROJECT_NAME}
347 Description: ${PROJECT_DESCRIPTION}
348 Version: ${PROJECT_VERSION}
349 URL: ${PROJECT_HOMEPAGE_URL}
350 Cflags: -I\${includedir} ${PC_CFLAGS}
351 Libs: -L\${libdir} -llua${suffix}
352 Libs.private: ${PC_LDFLAGS}
354 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lua${LUA_VERSION}.pc
355   DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
357 install(FILES doc/lua.1 RENAME lua${LUA_VERSION}.1
358   DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
360 install(FILES doc/luac.1 RENAME luac${LUA_VERSION}.1
361   DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
363 set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
364 include(CPack)
366 if(EXISTS ${LUA_USER_H})
367   get_filename_component(LUA_USER_H ${LUA_USER_H} NAME)
368   install(CODE "file(READ \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/lua${LUA_VERSION}/lua.h\" text)
369   string(REGEX REPLACE \"/([^/]+)#if defined\\\\(LUA_USER_H\\\\)\" \"/\\\\1#include \\\"${LUA_USER_H}\\\"\\n#if defined(LUA_USER_H)\" text \"\${text}\")
370   file(WRITE \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/lua${LUA_VERSION}/lua.h\" \"\${text}\")")
371 endif()