From b255d8a1a19cb40a9d04f33e483aa18c3e0a38c8 Mon Sep 17 00:00:00 2001 From: Gerald Combs Date: Sat, 7 Mar 2015 10:43:45 -0800 Subject: [PATCH] CMake: Update wslua build and test. Process wslua/CMakeLists.txt using add_subdirectory instead of include. Generate files in the build directory instead of the source directory. Copy lua scripts to DATAFILE_DIR instead of DATAFILE_DIR/lua. That's where init.lua looks for console.lua. Always set WIRESHARK_RUN_FROM_BUILD_DIRECTORY when testing. We presumably want to test our source files and not files which may or may not be in the system path. When we're running from the build directory look for lua scripts in both the Autotools and CMake build locations. Change-Id: Ic15ab8c58ff1b170d000c9b3e0a329af2ec44b7b Reviewed-on: https://code.wireshark.org/review/7590 Reviewed-by: Gerald Combs Petri-Dish: Gerald Combs Tested-by: Petri Dish Buildbot Reviewed-by: Graham Bloice Reviewed-by: Anders Broman --- CMakeLists.txt | 8 +-- epan/CMakeLists.txt | 5 +- epan/wslua/CMakeLists.txt | 144 ++++++++++++++++++++------------------ epan/wslua/init_wslua.c | 9 ++- epan/wslua/wslua_dir.c | 8 ++- epan/wslua/wslua_util.c | 8 ++- test/config.sh | 4 ++ test/suite-nameres.sh | 2 +- 8 files changed, 109 insertions(+), 79 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 78d93d1a82..efe27a9553 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1401,18 +1401,18 @@ if(LUA_FOUND) ) add_custom_command(TARGET copy_data_files PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - "${CMAKE_BINARY_DIR}/epan/init.lua" - "${DATAFILE_DIR}/lua" + "${CMAKE_BINARY_DIR}/epan/wslua/init.lua" + "${DATAFILE_DIR}" ) add_custom_command(TARGET copy_data_files PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/epan/wslua/console.lua" - "${DATAFILE_DIR}/lua" + "${DATAFILE_DIR}" ) add_custom_command(TARGET copy_data_files PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_SOURCE_DIR}/epan/wslua/dtd_gen.lua" - "${DATAFILE_DIR}/lua" + "${DATAFILE_DIR}" ) add_dependencies(copy_data_files wsluaauxiliary) endif(LUA_FOUND) diff --git a/epan/CMakeLists.txt b/epan/CMakeLists.txt index ad7aaba690..24881aba57 100644 --- a/epan/CMakeLists.txt +++ b/epan/CMakeLists.txt @@ -31,7 +31,9 @@ endif() if (HAVE_LIBLUA) - include( wslua/CMakeLists.txt ) + add_subdirectory( wslua ) + WSLUA_GENERATE_TAP_SRC() + WSLUA_GENERATE_REG_SRC() endif() source_group(wslua FILES ${WSLUA_FILES}) @@ -43,6 +45,7 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR}/dissectors ${CMAKE_CURRENT_SOURCE_DIR}/ftypes ${CMAKE_CURRENT_SOURCE_DIR}/wslua + ${CMAKE_CURRENT_BINARY_DIR}/wslua ${CMAKE_CURRENT_SOURCE_DIR}/nghttp2 ) diff --git a/epan/wslua/CMakeLists.txt b/epan/wslua/CMakeLists.txt index c374f2c99a..e3c2b75a2b 100644 --- a/epan/wslua/CMakeLists.txt +++ b/epan/wslua/CMakeLists.txt @@ -19,91 +19,98 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # -# This file is to be included/run from epan/CMakeLists.txt - set(WSLUA_MODULES - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/lua_bitop.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/lrexlib.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/lrexlib_glib.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/lrexlib_glib_f.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_int64.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_tvb.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_proto.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_tree.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_pinfo.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_listener.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_gui.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_dir.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_util.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_field.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_file.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_struct.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_dumper.c - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/wslua_internals.c + ${CMAKE_CURRENT_SOURCE_DIR}/lua_bitop.c + ${CMAKE_CURRENT_SOURCE_DIR}/lrexlib.c + ${CMAKE_CURRENT_SOURCE_DIR}/lrexlib_glib.c + ${CMAKE_CURRENT_SOURCE_DIR}/lrexlib_glib_f.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_int64.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_tvb.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_proto.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_tree.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_pinfo.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_listener.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_gui.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_dir.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_util.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_field.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_file.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_struct.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_dumper.c + ${CMAKE_CURRENT_SOURCE_DIR}/wslua_internals.c ) +set (WSLUA_MODULES ${WSLUA_MODULES} PARENT_SCOPE) set(WSLUA_FILES ${WSLUA_MODULES} - taps_wslua.c - register_wslua.c - wslua/init_wslua.c -) - -# Used with untypical CWD -set(WSLUA_TAPS_USED - ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-http.h - ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-ip.h - ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-udp.h - ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-h225.h - ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-ieee80211.h + ${CMAKE_CURRENT_BINARY_DIR}/taps_wslua.c + ${CMAKE_CURRENT_BINARY_DIR}/register_wslua.c + ${CMAKE_CURRENT_SOURCE_DIR}/init_wslua.c + PARENT_SCOPE ) # make-taps.pl depends on the current working directory # to find the dissector files (contents of taps file # depend on this actually, so just changing the paths # in these lists won't help). -ADD_CUSTOM_COMMAND( - OUTPUT - ${CMAKE_CURRENT_BINARY_DIR}/taps_wslua.c - ${CMAKE_CURRENT_BINARY_DIR}/taps.txt - COMMAND ${PERL_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/make-taps.pl - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/taps - ${CMAKE_CURRENT_BINARY_DIR}/taps_wslua.c - ${CMAKE_CURRENT_BINARY_DIR}/taps.txt - ${CMAKE_CURRENT_SOURCE_DIR}/wslua - WORKING_DIRECTORY - ${CMAKE_CURRENT_SOURCE_DIR}/wslua - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/taps - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/make-taps.pl - # Only here to add dependencies for the taps "source"files - ${WSLUA_TAPS_USED} -) -ADD_CUSTOM_COMMAND( - OUTPUT - declare_wslua.h - register_wslua.c - COMMAND ${PERL_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/make-reg.pl - ${WSLUA_MODULES} - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/make-reg.pl - ${WSLUA_MODULES} - # ${CMAKE_CURRENT_BINARY_DIR}/taps_wslua.c -) +macro(WSLUA_GENERATE_TAP_SRC) + # Used with untypical CWD + set(WSLUA_TAPS_USED + ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-http.h + ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-ip.h + ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-udp.h + ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-h225.h + ${CMAKE_SOURCE_DIR}/epan/dissectors/packet-ieee80211.h + ) + + ADD_CUSTOM_COMMAND( + OUTPUT + ${CMAKE_BINARY_DIR}/epan/wslua/taps_wslua.c + ${CMAKE_BINARY_DIR}/epan/wslua/taps.txt + COMMAND ${PERL_EXECUTABLE} + ${CMAKE_SOURCE_DIR}/epan/wslua/make-taps.pl + ${CMAKE_SOURCE_DIR}/epan/wslua/taps + ${CMAKE_BINARY_DIR}/epan/wslua/taps_wslua.c + ${CMAKE_BINARY_DIR}/epan/wslua/taps.txt + ${CMAKE_SOURCE_DIR}/epan/wslua + WORKING_DIRECTORY + ${CMAKE_SOURCE_DIR}/epan/wslua + DEPENDS + ${CMAKE_SOURCE_DIR}/epan/wslua/taps + ${CMAKE_SOURCE_DIR}/epan/wslua/make-taps.pl + # Only here to add dependencies for the taps "source"files + ${WSLUA_TAPS_USED} + ) +endmacro() + +macro(WSLUA_GENERATE_REG_SRC) + ADD_CUSTOM_COMMAND( + OUTPUT + ${CMAKE_BINARY_DIR}/epan/wslua/declare_wslua.h + ${CMAKE_BINARY_DIR}/epan/wslua/register_wslua.c + COMMAND ${PERL_EXECUTABLE} + ${CMAKE_SOURCE_DIR}/epan/wslua/make-reg.pl + ${WSLUA_MODULES} + WORKING_DIRECTORY + ${CMAKE_BINARY_DIR}/epan/wslua + DEPENDS + ${CMAKE_SOURCE_DIR}/epan/wslua/make-reg.pl + ${WSLUA_MODULES} + # ${CMAKE_CURRENT_BINARY_DIR}/taps_wslua.c + ) +endmacro() ADD_CUSTOM_COMMAND( OUTPUT init.lua COMMAND ${PERL_EXECUTABLE} - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/make-init-lua.pl + ${CMAKE_CURRENT_SOURCE_DIR}/make-init-lua.pl ${CMAKE_SOURCE_DIR} - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/template-init.lua + ${CMAKE_CURRENT_SOURCE_DIR}/template-init.lua > init.lua DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/make-init-lua.pl - ${CMAKE_CURRENT_SOURCE_DIR}/wslua/template-init.lua + ${CMAKE_CURRENT_SOURCE_DIR}/make-init-lua.pl + ${CMAKE_CURRENT_SOURCE_DIR}/template-init.lua ${CMAKE_SOURCE_DIR}/epan/ftypes/ftypes.h ${CMAKE_SOURCE_DIR}/wiretap/wtap.h ${CMAKE_SOURCE_DIR}/epan/epan.h @@ -119,10 +126,9 @@ set_target_properties(wsluaauxiliary PROPERTIES FOLDER "Auxiliary") install( FILES - wslua/console.lua - wslua/dtd_gen.lua + console.lua + dtd_gen.lua ${CMAKE_CURRENT_BINARY_DIR}/init.lua DESTINATION ${CMAKE_INSTALL_DATADIR}/${CPACK_PACKAGE_NAME} ) - diff --git a/epan/wslua/init_wslua.c b/epan/wslua/init_wslua.c index 6e044ea811..86474817cc 100644 --- a/epan/wslua/init_wslua.c +++ b/epan/wslua/init_wslua.c @@ -814,9 +814,15 @@ int wslua_init(register_cb cb, gpointer client_data) { /* load system's init.lua */ if (running_in_build_directory()) { - /* Running from build directory, load generated file */ + /* Running from build directory, try the source directory (Autotools) */ filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "epan" G_DIR_SEPARATOR_S "wslua" G_DIR_SEPARATOR_S "init.lua", get_progfile_dir()); + if (( ! file_exists(filename))) { + /* Try the CMake output directory */ + g_free(filename); + filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "init.lua", + get_progfile_dir()); + } } else { filename = get_datafile_path("init.lua"); } @@ -923,4 +929,3 @@ lua_State* wslua_state(void) { return L; } * vi: set shiftwidth=4 tabstop=4 expandtab: * :indentSize=4:tabSize=4:noTabs=true: */ - diff --git a/epan/wslua/wslua_dir.c b/epan/wslua/wslua_dir.c index 163006989f..9965a2f498 100644 --- a/epan/wslua/wslua_dir.c +++ b/epan/wslua/wslua_dir.c @@ -302,9 +302,15 @@ WSLUA_CONSTRUCTOR Dir_global_config_path(lua_State* L) { char* filename; if (running_in_build_directory()) { - /* Running in build directory, set datafile_path to wslua source directory */ + /* Running in build directory, try the source directory (Autotools) */ filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "epan" G_DIR_SEPARATOR_S "wslua" G_DIR_SEPARATOR_S "%s", get_datafile_dir(), fname); + if (( ! file_exists(filename))) { + /* Try the CMake output directory */ + g_free(filename); + filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", + get_progfile_dir(), fname); + } } else { filename = get_datafile_path(fname); } diff --git a/epan/wslua/wslua_util.c b/epan/wslua/wslua_util.c index cef3daf870..f26adefced 100644 --- a/epan/wslua/wslua_util.c +++ b/epan/wslua/wslua_util.c @@ -165,9 +165,15 @@ char* wslua_get_actual_filename(const char* fname) { g_free(filename); if (running_in_build_directory()) { - /* Running in build directory, try wslua source directory */ + /* Running in build directory, try the source directory (Autotools) */ filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "epan" G_DIR_SEPARATOR_S "wslua" G_DIR_SEPARATOR_S "%s", get_datafile_dir(), fname_clean); + if (( ! file_exists(filename))) { + /* Try the CMake output directory */ + g_free(filename); + filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", + get_progfile_dir(), fname_clean); + } if ( file_exists(filename) ) { return filename; } diff --git a/test/config.sh b/test/config.sh index b496f0b383..8e05e21111 100755 --- a/test/config.sh +++ b/test/config.sh @@ -21,6 +21,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # +# The files we want to test are in the build directory. +WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 +export WIRESHARK_RUN_FROM_BUILD_DIRECTORY + # Set WS_SYSTEM to our system type, e.g. Windows, Linux, Darwin # http://support.microsoft.com/kb/100843 if [ -n "${OS#Windows}" ] ; then diff --git a/test/suite-nameres.sh b/test/suite-nameres.sh index 5ed5fecdc7..8cef34f731 100755 --- a/test/suite-nameres.sh +++ b/test/suite-nameres.sh @@ -157,7 +157,7 @@ name_resolution_cleanup_step() { name_resolution_prep_step() { CUSTOM_PROFILE_PATH="$CONF_PATH/profiles/$CUSTOM_PROFILE_NAME" - TS_NR_ENV="WIRESHARK_RUN_FROM_BUILD_DIRECTORY=1 ${HOME_ENV}=${HOME_PATH}" + TS_NR_ENV="${HOME_ENV}=${HOME_PATH}" name_resolution_cleanup_step mkdir -p "$CUSTOM_PROFILE_PATH"