@@ -166,40 +166,68 @@ return status\;
166
166
RENAME ${_source_name} .lua )
167
167
endmacro ()
168
168
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 )
172
192
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 ()
175
199
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 )
182
205
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} )
186
210
endif ()
187
- else ()
211
+ else () # Lua C binary module
188
212
enable_language ( C )
189
- get_filename_component ( _module_name ${_bin_module} NAME_WE )
190
- get_filename_component ( _module_path ${_bin_module} PATH )
191
-
192
213
find_package ( Lua51 REQUIRED )
193
214
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 ()
194
224
195
- add_library ( ${_target} MODULE ${_MODULE_DEFAULT_ARGS } )
225
+ add_library ( ${_target} MODULE ${_MODULE_SRC } )
196
226
target_link_libraries ( ${_target} ${LUA_LIBRARY} ${_MODULE_LINK} )
197
227
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} )
203
231
endif ()
204
232
endif ()
205
233
endmacro ()
@@ -212,10 +240,14 @@ endmacro ()
212
240
# USE: add_lua_module ( socket.http src/http.lua )
213
241
# USE2: add_lua_module ( mime.core src/mime.c )
214
242
# 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.
215
247
# Also sets variable _module_path (relative path where module typically
216
248
# 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} )
219
251
endmacro ()
220
252
221
253
@@ -224,8 +256,8 @@ endmacro ()
224
256
# USE: install_lua_module ( socket.http src/http.lua )
225
257
# USE2: install_lua_module ( mime.core src/mime.c )
226
258
# 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} )
229
261
endmacro ()
230
262
231
263
# Builds string representing Lua table mapping Lua modules names to file
0 commit comments