Skip to content
This repository was archived by the owner on Nov 20, 2020. It is now read-only.

Commit 47a5439

Browse files
committed
cmake: update dist.cmake
1 parent a5fee2c commit 47a5439

File tree

1 file changed

+60
-28
lines changed

1 file changed

+60
-28
lines changed

cmake/lua.cmake

Lines changed: 60 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -166,40 +166,68 @@ return status\;
166166
RENAME ${_source_name}.lua )
167167
endmacro ()
168168

169-
macro ( _lua_module_helper is_install _name )
170-
string ( REPLACE "." "/" _module "${_name}" )
171-
string ( REPLACE "." "_" _target "${_name}" )
169+
macro ( _lua_module_helper is_install _name )
170+
parse_arguments ( _MODULE "LINK;ALL_IN_ONE" "" ${ARGN} )
171+
# _target is CMake-compatible target name for module (e.g. socket_core).
172+
# _module is relative path of target (e.g. socket/core),
173+
# without extension (e.g. .lua/.so/.dll).
174+
# _MODULE_SRC is list of module source files (e.g. .lua and .c files).
175+
# _MODULE_NAMES is list of module names (e.g. socket.core).
176+
if ( _MODULE_ALL_IN_ONE )
177+
string ( REGEX REPLACE "\\..*" "" _target "${_name}" )
178+
string ( REGEX REPLACE "\\..*" "" _module "${_name}" )
179+
set ( _target "${_target}_all_in_one")
180+
set ( _MODULE_SRC ${_MODULE_ALL_IN_ONE} )
181+
set ( _MODULE_NAMES ${_name} ${_MODULE_DEFAULT_ARGS} )
182+
else ()
183+
string ( REPLACE "." "_" _target "${_name}" )
184+
string ( REPLACE "." "/" _module "${_name}" )
185+
set ( _MODULE_SRC ${_MODULE_DEFAULT_ARGS} )
186+
set ( _MODULE_NAMES ${_name} )
187+
endif ()
188+
if ( NOT _MODULE_SRC )
189+
message ( FATAL_ERROR "no module sources specified" )
190+
endif ()
191+
list ( GET _MODULE_SRC 0 _first_source )
172192

173-
set ( _lua_module "${_module}.lua" )
174-
set ( _bin_module "${_module}${CMAKE_SHARED_MODULE_SUFFIX}" )
193+
get_filename_component ( _ext ${_first_source} EXT )
194+
if ( _ext STREQUAL ".lua" ) # Lua source module
195+
list ( LENGTH _MODULE_SRC _len )
196+
if ( _len GREATER 1 )
197+
message ( FATAL_ERROR "more than one source file specified" )
198+
endif ()
175199

176-
parse_arguments ( _MODULE "LINK" "" ${ARGN} )
177-
get_filename_component ( _ext ${ARGV2} EXT )
178-
if ( _ext STREQUAL ".lua" )
179-
get_filename_component ( _path ${_lua_module} PATH )
180-
get_filename_component ( _filename ${_lua_module} NAME )
181-
_append_path ( "${CMAKE_CURRENT_SOURCE_DIR}" "${ARGV2}" _module_path )
200+
set ( _module "${_module}.lua" )
201+
202+
get_filename_component ( _module_dir ${_module} PATH )
203+
get_filename_component ( _module_filename ${_module} NAME )
204+
_append_path ( "${CMAKE_CURRENT_SOURCE_DIR}" "${_first_source}" _module_path )
182205
list ( APPEND _lua_modules "${_name}" "${_module_path}" )
183-
if ( is_install )
184-
install ( FILES ${ARGV2} DESTINATION ${INSTALL_LMOD}/${_module_path}
185-
RENAME ${_filename} )
206+
207+
if ( ${is_install} )
208+
install ( FILES ${_first_source} DESTINATION ${INSTALL_LMOD}/${_module_dir}
209+
RENAME ${_module_filename} )
186210
endif ()
187-
else ()
211+
else () # Lua C binary module
188212
enable_language ( C )
189-
get_filename_component ( _module_name ${_bin_module} NAME_WE )
190-
get_filename_component ( _module_path ${_bin_module} PATH )
191-
192213
find_package ( Lua51 REQUIRED )
193214
include_directories ( ${LUA_INCLUDE_DIR} )
215+
216+
set ( _module "${_module}${CMAKE_SHARED_MODULE_SUFFIX}" )
217+
218+
get_filename_component ( _module_dir ${_module} PATH )
219+
get_filename_component ( _module_filenamebase ${_module} NAME_WE )
220+
foreach ( _thisname ${_MODULE_NAMES} )
221+
list ( APPEND _lua_modules "${_thisname}"
222+
"${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_CFG_INTDIR}/${_module}" )
223+
endforeach ()
194224

195-
add_library( ${_target} MODULE ${_MODULE_DEFAULT_ARGS})
225+
add_library( ${_target} MODULE ${_MODULE_SRC})
196226
target_link_libraries ( ${_target} ${LUA_LIBRARY} ${_MODULE_LINK} )
197227
set_target_properties ( ${_target} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
198-
"${_module_path}" PREFIX "" OUTPUT_NAME "${_module_name}" )
199-
list ( APPEND _lua_modules "${_name}"
200-
"${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_CFG_INTDIR}/${_bin_module}" )
201-
if ( is_install )
202-
install ( TARGETS ${_target} DESTINATION ${INSTALL_CMOD}/${_module_path})
228+
"${_module_dir}" PREFIX "" OUTPUT_NAME "${_module_filenamebase}" )
229+
if ( ${is_install} )
230+
install ( TARGETS ${_target} DESTINATION ${INSTALL_CMOD}/${_module_dir})
203231
endif ()
204232
endif ()
205233
endmacro ()
@@ -212,10 +240,14 @@ endmacro ()
212240
# USE: add_lua_module ( socket.http src/http.lua )
213241
# USE2: add_lua_module ( mime.core src/mime.c )
214242
# USE3: add_lua_module ( socket.core ${SRC_SOCKET} LINK ${LIB_SOCKET} )
243+
# USE4: add_lua_module ( ssl.context ssl.core ALL_IN_ONE src/context.c src/ssl.c )
244+
# This form builds an "all-in-one" module (e.g. ssl.so or ssl.dll containing
245+
# both modules ssl.context and ssl.core). The CMake target name will be
246+
# ssl_all_in_one.
215247
# Also sets variable _module_path (relative path where module typically
216248
# would be installed).
217-
macro ( add_lua_module _name)
218-
_lua_module_helper ( FALSE ${_name} ${ARGN} )
249+
macro ( add_lua_module )
250+
_lua_module_helper ( 0 ${ARGN} )
219251
endmacro ()
220252

221253

@@ -224,8 +256,8 @@ endmacro ()
224256
# USE: install_lua_module ( socket.http src/http.lua )
225257
# USE2: install_lua_module ( mime.core src/mime.c )
226258
# USE3: install_lua_module ( socket.core ${SRC_SOCKET} LINK ${LIB_SOCKET} )
227-
macro ( install_lua_module _name )
228-
_lua_module_helper ( TRUE ${_name} ${ARGN} )
259+
macro ( install_lua_module )
260+
_lua_module_helper ( 1 ${ARGN} )
229261
endmacro ()
230262

231263
# Builds string representing Lua table mapping Lua modules names to file

0 commit comments

Comments
 (0)