CMake: Build an application bundle (Wireshark.app) on OS X.

Add an ENABLE_APPLICATION_BUNDLE option which is enabled by default on
OS X and disabled elsewhere. The bundle is currently bare-bones and only
contains the main executables, Info.plist, and application icon.

Capitalize the main application name when ENABLE_APPLICATION_BUNDLE is
set and on Windows.

Start updating CPackConfig.txt for OS X packaging.

To do:

  - Add supporting libraries and frameworks.

  - Make the bundle standalone. I.e. call FIXUP_BUNDLE or
    replicate the relevant parts of osx-app.sh

Change-Id: I4e25abd3b8cbe121ec8615b98706a15c58812cdb
Reviewed-on: https://code.wireshark.org/review/4577
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
Gerald Combs 2014-10-09 11:37:27 -07:00
parent 58cc452d6f
commit e00ac05cf3
3 changed files with 85 additions and 39 deletions

View File

@ -1098,6 +1098,29 @@ if( (BUILD_wireshark AND QT_FOUND) OR (BUILD_wireshark_gtk AND GTK_FOUND) )
)
endif()
if(ENABLE_APPLICATION_BUNDLE)
# Wireshark.app/Contents
set(BUNDLE_CONTENTS_FILES
${CMAKE_BINARY_DIR}/packaging/macosx/PkgInfo
)
set_source_files_properties(${BUNDLE_CONTENTS_FILES} PROPERTIES
MACOSX_PACKAGE_LOCATION .
)
# Wireshark.app/Contents/Resources
set(BUNDLE_RESOURCE_FILES
${CMAKE_SOURCE_DIR}/packaging/macosx/Resources/Wireshark.icns
${CMAKE_SOURCE_DIR}/packaging/macosx/Resources/Wiresharkdoc.icns
)
set_source_files_properties(${BUNDLE_RESOURCE_FILES} PROPERTIES
MACOSX_PACKAGE_LOCATION Resources
)
set(EXTRA_BUNDLE_FILES ${BUNDLE_CONTENTS_FILES} ${BUNDLE_RESOURCE_FILES})
else()
set(EXTRA_BUNDLE_FILES)
endif()
if(BUILD_wireshark AND QT_FOUND)
set(wireshark_LIBS
qtui
@ -1120,11 +1143,25 @@ if(BUILD_wireshark AND QT_FOUND)
cmake_policy(SET CMP0020 OLD)
endif()
add_executable(wireshark ${wireshark_FILES})
add_executable(wireshark MACOSX_BUNDLE ${wireshark_FILES} ${EXTRA_BUNDLE_FILES})
set_target_properties(wireshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(wireshark PROPERTIES FOLDER "Executables")
if(ENABLE_APPLICATION_BUNDLE OR WIN32)
set_target_properties(wireshark PROPERTIES OUTPUT_NAME Wireshark)
endif()
if(ENABLE_APPLICATION_BUNDLE)
set_target_properties(
wireshark PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${CMAKE_BINARY_DIR}/packaging/macosx/Info.plist
)
endif()
target_link_libraries(wireshark ${wireshark_LIBS})
install(TARGETS wireshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
install(
TARGETS wireshark
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
BUNDLE DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Map for endpoints dialog
ADD_CUSTOM_COMMAND(
@ -1136,6 +1173,20 @@ if(BUILD_wireshark AND QT_FOUND)
)
endif()
# Common properties for CLI executables
macro(set_extra_executable_properties _executable _folder)
set_target_properties(${_executable} PROPERTIES
LINK_FLAGS "${WS_LINK_FLAGS}"
FOLDER ${_folder}
)
if(ENABLE_APPLICATION_BUNDLE)
set_target_properties(${_executable} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY run/Wireshark.app/Contents/MacOS
)
endif()
endmacro()
if(BUILD_wireshark_gtk AND GTK_FOUND)
set(wireshark_gtk_LIBS
gtkui
@ -1195,8 +1246,7 @@ if(BUILD_tshark)
image/tshark.rc
)
add_executable(tshark ${tshark_FILES})
set_target_properties(tshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(tshark PROPERTIES FOLDER "Executables")
set_extra_executable_properties(tshark "Executables")
target_link_libraries(tshark ${tshark_LIBS})
install(TARGETS tshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1215,8 +1265,7 @@ if(BUILD_tfshark)
image/tfshark.rc
)
add_executable(tfshark ${tfshark_FILES})
set_target_properties(tfshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(tfshark PROPERTIES FOLDER "Executables")
set_extra_executable_properties(tfshark "Executables")
target_link_libraries(tfshark ${tfshark_LIBS})
install(TARGETS tfshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1235,8 +1284,7 @@ if(BUILD_rawshark AND PCAP_FOUND)
image/rawshark.rc
)
add_executable(rawshark ${rawshark_FILES})
set_target_properties(rawshark PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(rawshark PROPERTIES FOLDER "Executables")
set_extra_executable_properties(rawshark "Executables")
target_link_libraries(rawshark ${rawshark_LIBS})
install(TARGETS rawshark RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1250,8 +1298,7 @@ if(BUILD_dftest)
ui/util.c
)
add_executable(dftest ${dftest_FILES})
set_target_properties(dftest PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(dftest PROPERTIES FOLDER "Tests")
set_extra_executable_properties(dftest "Tests")
target_link_libraries(dftest ${dftest_LIBS})
install(TARGETS dftest RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1272,8 +1319,7 @@ if(BUILD_randpkt)
randpkt.c
)
add_executable(randpkt ${randpkt_FILES})
set_target_properties(randpkt PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(randpkt PROPERTIES FOLDER "Executables")
set_extra_executable_properties(randpkt "Executables")
target_link_libraries(randpkt ${randpkt_LIBS})
install(TARGETS randpkt RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1297,8 +1343,7 @@ if(BUILD_text2pcap)
text2pcap-scanner.l
)
add_executable(text2pcap ${text2pcap_FILES})
set_target_properties(text2pcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(text2pcap PROPERTIES FOLDER "Executables")
set_extra_executable_properties(text2pcap "Executables")
target_link_libraries(text2pcap ${text2pcap_LIBS})
install(TARGETS text2pcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1315,8 +1360,7 @@ if(BUILD_mergecap)
image/mergecap.rc
)
add_executable(mergecap ${mergecap_FILES})
set_target_properties(mergecap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(mergecap PROPERTIES FOLDER "Executables")
set_extra_executable_properties(mergecap "Executables")
target_link_libraries(mergecap ${mergecap_LIBS})
install(TARGETS mergecap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1333,8 +1377,7 @@ if(BUILD_reordercap)
image/reordercap.rc
)
add_executable(reordercap ${reordercap_FILES})
set_target_properties(reordercap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(reordercap PROPERTIES FOLDER "Executables")
set_extra_executable_properties(reordercap "Executables")
target_link_libraries(reordercap ${reordercap_LIBS})
install(TARGETS reordercap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1353,8 +1396,7 @@ if(BUILD_capinfos)
image/capinfos.rc
)
add_executable(capinfos ${capinfos_FILES})
set_target_properties(capinfos PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(capinfos PROPERTIES FOLDER "Executables")
set_extra_executable_properties(capinfos "Executables")
target_link_libraries(capinfos ${capinfos_LIBS})
install(TARGETS capinfos RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1372,8 +1414,7 @@ if(BUILD_captype)
image/captype.rc
)
add_executable(captype ${captype_FILES})
set_target_properties(captype PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(captype PROPERTIES FOLDER "Executables")
set_extra_executable_properties(captype "Executables")
target_link_libraries(captype ${captype_LIBS})
install(TARGETS captype RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1390,8 +1431,7 @@ if(BUILD_editcap)
image/editcap.rc
)
add_executable(editcap ${editcap_FILES})
set_target_properties(editcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(editcap PROPERTIES FOLDER "Executables")
set_extra_executable_properties(editcap "Executables")
target_link_libraries(editcap ${editcap_LIBS})
install(TARGETS editcap RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
endif()
@ -1423,12 +1463,10 @@ if(BUILD_dumpcap AND PCAP_FOUND)
image/dumpcap.rc
)
add_executable(dumpcap ${dumpcap_FILES})
set_target_properties(dumpcap PROPERTIES LINK_FLAGS "${WS_LINK_FLAGS}")
set_target_properties(dumpcap PROPERTIES FOLDER "Executables")
set_extra_executable_properties(dumpcap "Executables")
target_link_libraries(dumpcap ${dumpcap_LIBS})
install(TARGETS dumpcap
RUNTIME
DESTINATION ${CMAKE_INSTALL_BINDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
PERMISSIONS ${DUMPCAP_SETUID}
OWNER_READ OWNER_WRITE OWNER_EXECUTE
GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
@ -1500,6 +1538,13 @@ ADD_CUSTOM_COMMAND(
)
endif()
if(ENABLE_APPLICATION_BUNDLE)
ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_BINARY_DIR}/packaging/macosx/PkgInfo
COMMAND ${CMAKE_COMMAND} -E echo APPLWshk > ${CMAKE_BINARY_DIR}/packaging/macosx/PkgInfo
)
endif()
pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/capinfos 1 )
pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/captype 1 )
pod2manhtml( ${CMAKE_SOURCE_DIR}/doc/dftest 1 )

View File

@ -74,3 +74,8 @@ option(ENABLE_SBC "Build with SBC Codec support in RTP Player" ON)
set(DUMPCAP_INSTALL_OPTION "normal" CACHE STRING "Permissions to install")
set(DUMPCAP_INST_VALS "normal" "suid" "capabilities")
set_property(CACHE DUMPCAP_INSTALL_OPTION PROPERTY STRINGS ${DUMPCAP_INST_VALS})
if(APPLE)
option(ENABLE_APPLICATION_BUNDLE "Build a Mac OS X application bundle (Wireshark.app)" ON)
else()
option(ENABLE_APPLICATION_BUNDLE "Build a Mac OS X application bundle (Wireshark.app)" OFF)
endif()

View File

@ -44,17 +44,13 @@ set(CPACK_GENERATOR "TBZ2")
set(CPACK_SOURCE_GENERATOR "TBZ2")
#===============================================
# IF(APPLE)
# SET(CPACK_GENERATOR "${CPACK_GENERATOR};Bundle")
# SET(CPACK_BUNDLE_ICON "${OBDGPSLogger_SOURCE_DIR}/osx/BundleIcon.icns")
# SET(CPACK_BUNDLE_NAME "OBD GPS Logger")
# SET(CPACK_BUNDLE_PLIST "${OBDGPSLogger_SOURCE_DIR}/osx/Info.plist")
# SET(CPACK_BUNDLE_STARTUP_COMMAND "${OBDGPSLogger_SOURCE_DIR}/osx/StartupCommand")
#
# IF(GPSD_DAEMON)
# INSTALL(PROGRAMS ${GPSD_DAEMON}
# DESTINATION sbin/)
# ENDIF(GPSD_DAEMON)
IF(APPLE)
SET(CPACK_GENERATOR "${CPACK_GENERATOR};DragNDrop")
SET(CPACK_BUNDLE_ICON "${CMAKE_SOURCE_DIR}/packaging/macosx/Resources/Wireshark.icns")
SET(CPACK_BUNDLE_NAME "Wireshark")
SET(CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/packaging/macosx/Info.plist")
# SET(CPACK_BUNDLE_STARTUP_COMMAND "${OBDGPSLogger_SOURCE_DIR}/osx/StartupCommand")
ENDIF(APPLE)
# ELSE(APPLE)
#
# # If we can find rpmbuild, then go for it