1 cmake_minimum_required(VERSION 2.8.12...4.0)
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}")
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};")
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)
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)
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}")
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)
46 if(DEFINED ENV{ANDROID_ROOT} AND EXISTS $ENV{ANDROID_ROOT})
47 option(LUA_PIE "Enable/Disable position independent code" 1)
49 option(LUA_PIE "Enable/Disable position independent code" 0)
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)
58 if(CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL .lib)
59 list(APPEND LUA_PRIVATE _CRT_SECURE_NO_WARNINGS)
61 if(NOT LUA_VERSION VERSION_LESS 5.1)
62 option(LUA_APICHECK "Enable/Disable checks on the C API" 0)
64 list(APPEND LUA_PRIVATE LUA_USE_APICHECK)
67 unset(LUA_APICHECK CACHE)
71 file(READ ${name} ${text})
72 file(READ ${name} ${text}_)
75 if(NOT ${text} STREQUAL ${text}_)
76 file(WRITE ${name} "${${text}}")
77 message(STATUS "write ${name}")
83 file(GLOB LUACONF_H luaconf.h src/luaconf.h)
84 if(EXISTS ${LUACONF_H})
85 load(${LUACONF_H} LUACONF_H_TEXT)
87 list(APPEND LUA_PUBLIC LUA_USE_MACOSX)
89 list(APPEND LUA_PUBLIC LUA_USE_LINUX)
91 list(APPEND LUA_PUBLIC LUA_USE_POSIX)
94 option(LUA_COMPAT "Enable/Disable build lua compatibility" 0)
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)
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}")
113 if(NOT LUA_VERSION VERSION_LESS 5.3)
114 option(LUA_NOCVTN2S "Disable/Enable automatic coercion from strings to numbers" 0)
116 string(REGEX REPLACE "[^\n]*#define LUA_NOCVTN2S[^\n]*" "#define LUA_NOCVTN2S" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
118 string(REGEX REPLACE "[^\n]*#define LUA_NOCVTN2S[^\n]*" "/* #define LUA_NOCVTN2S */" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
120 option(LUA_NOCVTS2N "Disable/Enable automatic coercion from numbers to strings" 0)
122 string(REGEX REPLACE "[^\n]*#define LUA_NOCVTS2N[^\n]*" "#define LUA_NOCVTS2N" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
124 string(REGEX REPLACE "[^\n]*#define LUA_NOCVTS2N[^\n]*" "/* #define LUA_NOCVTS2N */" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
127 unset(LUA_NOCVTN2S CACHE)
128 unset(LUA_NOCVTS2N CACHE)
131 option(LUA_32BITS "Enable/Disable build lua 32bits" 0)
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}")
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}")
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}")
160 string(REGEX REPLACE "#define LUA_INTEGER([ \t]+)[^\n]*" "#define LUA_INTEGER\\1ptrdiff_t" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
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}")
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")
172 set(LUA_CPATH_DEFAULT ".so;\" \\\n\t\"./?.dylib;\" LUA_CDIR\"?.dylib;\" LUA_CDIR\"loadall.dylib\"\n")
174 string(REPLACE ".so\"\n" "${LUA_CPATH_DEFAULT}" LUACONF_H_TEXT "${LUACONF_H_TEXT}")
177 file(GLOB LOSLIB_C loslib.c src/loslib.c)
178 if(EXISTS ${LOSLIB_C})
179 load(${LOSLIB_C} LOSLIB_C_TEXT)
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)
189 file(TO_CMAKE_PATH "/tmp/lua_XXXXXX" LUA_TMPNAMTEMPLATE)
191 string(LENGTH "${LUA_TMPNAMTEMPLATE} " LUA_TMPNAMBUFSIZE)
192 if(LUA_TMPNAMBUFSIZE LESS 32)
193 set(LUA_TMPNAMBUFSIZE 32)
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}")
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}")
204 file(GLOB LUA_C lua.c src/lua.c)
206 load(${LUA_C} LUA_C_TEXT)
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}")
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}")
221 save(${LUA_C} LUA_C_TEXT)
223 if(EXISTS ${LOSLIB_C})
224 save(${LOSLIB_C} LOSLIB_C_TEXT)
226 if(EXISTS ${LUACONF_H})
227 save(${LUACONF_H} LUACONF_H_TEXT)
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}">)
240 if(EXISTS ${CMAKE_CURRENT_LIST_DIR}/src)
241 target_include_directories(${target} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_LIST_DIR}/src>)
243 if(CMAKE_C_COMPILER_ID MATCHES "TinyCC" AND CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL .lib)
244 set_target_properties(${target} PROPERTIES IMPORT_SUFFIX .def)
246 set_target_properties(${target} PROPERTIES POSITION_INDEPENDENT_CODE 1
247 INTERPROCEDURAL_OPTIMIZATION ${LUA_IPO}
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)
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})
264 add_library(lualib SHARED $<TARGET_OBJECTS:lua.o>)
266 add_library(liblua STATIC $<TARGET_OBJECTS:lua.o>)
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)
273 set_property(TARGET lualib PROPERTY PREFIX "")
274 set_property(TARGET liblua PROPERTY PREFIX lib)
275 set(suffix ${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR})
277 set(suffix ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR})
278 set_target_properties(luac lua PROPERTIES SUFFIX ${suffix})
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})
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)
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
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
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})
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}\")")