From 4add8b6b4523db8966c88d69b7f9710859ec3081 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Thu, 16 Jun 2016 15:27:25 -0700 Subject: cmake: add idl2wrs-dissectors target for DCERPC Add a callable target such that dissectors can be generated without the AUTOGEN_dcerpc option. Modelled after the pidl CMakeLists.txt file and target. This approach has the advantage over the previous implementation such that the clean target does not remove the packet-dcerpc-X.c files. Change-Id: I3226937eaa76dffa253df9d4f989421d5faa3f3f Reviewed-on: https://code.wireshark.org/review/15989 Petri-Dish: Peter Wu Tested-by: Petri Dish Buildbot Reviewed-by: Peter Wu --- .gitignore | 2 ++ CMakeOptions.txt | 1 - epan/dissectors/CMakeLists.txt | 41 +------------------------ epan/dissectors/dcerpc/CMakeLists.txt | 58 ++++++++++++++++++++++++++++++++--- 4 files changed, 56 insertions(+), 46 deletions(-) diff --git a/.gitignore b/.gitignore index 50f541612d..5040f70dc4 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ init.lua epan/declare_wslua.h epan/dissectors/dcerpc/idl2wrs +epan/dissectors/dcerpc/*/packet-dcerpc-*.[hc] epan/dissectors/mesa epan/dissectors/xcbproto epan/dissectors/packet-ncp2222.c @@ -137,6 +138,7 @@ rules.ninja .ninja_log epan/dissectors/asn1/*/*-stamp epan/dissectors/pidl/*-stamp +epan/dissectors/dcerpc/*-stamp # Generated dir # diff --git a/CMakeOptions.txt b/CMakeOptions.txt index 1f73fe7b45..8140b642e7 100644 --- a/CMakeOptions.txt +++ b/CMakeOptions.txt @@ -18,7 +18,6 @@ option(BUILD_androiddump "Build androiddump" ON) option(BUILD_sshdump "Build sshdump" ON) option(BUILD_ciscodump "Build ciscodump" ON) option(BUILD_randpktdump "Build randpktdump" ON) -option(AUTOGEN_dcerpc "Autogenerate DCE RPC dissectors" OFF) option(DISABLE_WERROR "Do not treat warnings as errors" OFF) option(EXTCAP_ANDROIDDUMP_LIBPCAP "Build androiddump using libpcap" OFF) diff --git a/epan/dissectors/CMakeLists.txt b/epan/dissectors/CMakeLists.txt index cafc528791..89b9b7a22c 100644 --- a/epan/dissectors/CMakeLists.txt +++ b/epan/dissectors/CMakeLists.txt @@ -22,7 +22,7 @@ ADD_CUSTOM_CMAKE_INCLUDE() add_subdirectory(asn1 EXCLUDE_FROM_ALL) -add_subdirectory(dcerpc) +add_subdirectory(dcerpc EXCLUDE_FROM_ALL) add_subdirectory(pidl EXCLUDE_FROM_ALL) include_directories( @@ -30,45 +30,6 @@ include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) -if(AUTOGEN_dcerpc) - foreach(PROTOCOL_NAME ${PIDL_DISSECTOR_AUTOGEN_NAMES}) - list(APPEND PIDL_DISSECTOR_AUTOGEN_SRC - dcerpc/${PROTOCOL_NAME}/packet-dcerpc-${PROTOCOL_NAME}.c - ) - endforeach() - - foreach(PROTOCOL_NAME ${PIDL_DISSECTOR_AUTOGEN_NAMES}) - set(CUR_PROTO_DIR ${CMAKE_CURRENT_SOURCE_DIR}/dcerpc/${PROTOCOL_NAME}) - set(CUR_PROTO_C_FILE packet-dcerpc-${PROTOCOL_NAME}.c) - set(CUR_PROTO_H_FILE packet-dcerpc-${PROTOCOL_NAME}.h) - add_custom_command( - OUTPUT - ${CUR_PROTO_DIR}/${CUR_PROTO_C_FILE} - ${CUR_PROTO_DIR}/${CUR_PROTO_H_FILE} - COMMAND - idl2wrs ${PROTOCOL_NAME} - COMMAND - ${CMAKE_COMMAND} -E copy_if_different ${CUR_PROTO_DIR}/${CUR_PROTO_C_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${CUR_PROTO_C_FILE} - COMMAND - ${CMAKE_COMMAND} -E copy_if_different ${CUR_PROTO_DIR}/${CUR_PROTO_H_FILE} ${CMAKE_CURRENT_SOURCE_DIR}/${CUR_PROTO_H_FILE} - WORKING_DIRECTORY - ${CUR_PROTO_DIR} - DEPENDS - ${CUR_PROTO_DIR}/${PROTOCOL_NAME}.idl - ${CUR_PROTO_DIR}/${PROTOCOL_NAME}.cnf - ${CUR_PROTO_DIR}/packet-dcerpc-${PROTOCOL_NAME}-template.c - ${CUR_PROTO_DIR}/packet-dcerpc-${PROTOCOL_NAME}-template.h - ) - endforeach() -else() - foreach(PROTOCOL_NAME ${PIDL_DISSECTOR_AUTOGEN_NAMES}) - set(PIDL_DISSECTOR_AUTOGEN_SRC - ${PIDL_DISSECTOR_AUTOGEN_SRC} - packet-dcerpc-${PROTOCOL_NAME}.c - ) - endforeach() -endif() - add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/packet-ncp2222.c COMMAND ${PYTHON_EXECUTABLE} diff --git a/epan/dissectors/dcerpc/CMakeLists.txt b/epan/dissectors/dcerpc/CMakeLists.txt index 276357cb75..53450fdfc8 100644 --- a/epan/dissectors/dcerpc/CMakeLists.txt +++ b/epan/dissectors/dcerpc/CMakeLists.txt @@ -19,11 +19,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # -set(PIDL_DISSECTOR_AUTOGEN_NAMES - budb - butc - drsuapi - PARENT_SCOPE +set(PIDL_DISSECTOR_NAMES + budb + butc + drsuapi ) set(IDL2WRS_FILES @@ -47,6 +46,55 @@ set_target_properties(idl2wrs PROPERTIES FOLDER "Executables") target_link_libraries(idl2wrs ${GLIB2_LIBRARIES}) +foreach(PROTOCOL_NAME IN LISTS PIDL_DISSECTOR_NAMES) + # Use a stamp file instead of OUTPUT to packet-dcerpc-X.c to + # avoid removing the .c file on clean. + add_custom_command( + OUTPUT packet-dcerpc-${PROTOCOL_NAME}-stamp + COMMAND + idl2wrs ${PROTOCOL_NAME} + COMMAND + "${CMAKE_COMMAND}" -E copy_if_different + packet-dcerpc-${PROTOCOL_NAME}.c + "${CMAKE_CURRENT_SOURCE_DIR}/../packet-dcerpc-${PROTOCOL_NAME}.c" + COMMAND + "${CMAKE_COMMAND}" -E copy_if_different + packet-dcerpc-${PROTOCOL_NAME}.h + "${CMAKE_CURRENT_SOURCE_DIR}/../packet-dcerpc-${PROTOCOL_NAME}.h" + COMMAND + "${CMAKE_COMMAND}" -E touch + "${CMAKE_CURRENT_BINARY_DIR}/packet-dcerpc-${PROTOCOL_NAME}-stamp" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${PROTOCOL_NAME}" + DEPENDS + "${CMAKE_SOURCE_DIR}/tools/pidl/pidl" + ${PROTOCOL_NAME}/${PROTOCOL_NAME}.idl + ${PROTOCOL_NAME}/${PROTOCOL_NAME}.cnf + ${PROTOCOL_NAME}/packet-dcerpc-${PROTOCOL_NAME}-template.h + ${PROTOCOL_NAME}/packet-dcerpc-${PROTOCOL_NAME}-template.c + VERBATIM + ) + add_custom_target(generate_dissector-dcerpc-${PROTOCOL_NAME} + DEPENDS packet-dcerpc-${PROTOCOL_NAME}-stamp + ) + set_target_properties(generate_dissector-dcerpc-${PROTOCOL_NAME} + PROPERTIES FOLDER "Generated Dissectors/PIDL" + ) + list(APPEND PIDL_DISSECTOR_TARGETS + generate_dissector-dcerpc-${PROTOCOL_NAME} + ) + list(APPEND PIDL_DISSECTOR_SRC + packet-dcerpc-${PROTOCOL_NAME}.c + ) +endforeach() + +set(PIDL_DISSECTOR_AUTOGEN_SRC ${PIDL_DISSECTOR_SRC} PARENT_SCOPE) + +# TODO should probably just merge this into pidl-dissectors +add_custom_target(idl2wrs-dissectors ALL DEPENDS ${PIDL_DISSECTOR_TARGETS}) +set_target_properties(idl2wrs-dissectors + PROPERTIES FOLDER "Generated Dissectors/PIDL" +) + # # Editor modelines - https://www.wireshark.org/tools/modelines.html # -- cgit v1.2.1