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 <peter@lekensteyn.nl>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
This commit is contained in:
Peter Wu 2016-06-16 15:27:25 -07:00
parent b0b2540fba
commit 4add8b6b45
4 changed files with 56 additions and 46 deletions

2
.gitignore vendored
View File

@ -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 #

View File

@ -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)

View File

@ -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}

View File

@ -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
#