[rkward/work/frameworks-Mac] rkward: updated install logic for Mac (and a select general changes)
R.J.V. Bertin
null at kde.org
Wed May 17 19:42:55 UTC 2017
Git commit d2b6e33940fb76f6fef1ead93fd311cdf8c9368c by R.J.V. Bertin.
Committed on 17/05/2017 at 19:29.
Pushed by rjvbb into branch 'work/frameworks-Mac'.
updated install logic for Mac (and a select general changes)
This implements a first draft of a minimal build and install
procedure on Mac, meaning with as little changes as possible from
a standard Linux install but still providing a complete "Mac
experience".
A hook is provided for a future optional build as a standalone,
all-encompassing .app bundle
The application icon is generated on the fly from the available
png and svgz images (with a new enough ECM library).
M +44 -14 rkward/CMakeLists.txt
M +2 -1 rkward/rbackend/CMakeLists.txt
https://commits.kde.org/rkward/d2b6e33940fb76f6fef1ead93fd311cdf8c9368c
diff --git a/rkward/CMakeLists.txt b/rkward/CMakeLists.txt
index f6f78dda..03a0b1b4 100755
--- a/rkward/CMakeLists.txt
+++ b/rkward/CMakeLists.txt
@@ -4,11 +4,15 @@ ENDIF(NOT ${PROJECT_NAME} STREQUAL "rkward")
INCLUDE(SetVersionNumber.cmake)
-IF(Q_WS_MAC)
- SET(CPACK_BUNDLE_ICON rkward.icns)
- SET(CPACK_BUNDLE_NAME RKWard)
- SET(CPACK_BUNDLE_STARTUP_COMMAND rkward)
-ENDIF(Q_WS_MAC)
+IF(APPLE)
+ SET(CPACK_BUNDLE_ICON rkward.icns)
+ SET(CPACK_BUNDLE_NAME RKWard)
+ SET(CPACK_BUNDLE_STARTUP_COMMAND rkward)
+ENDIF()
+SET(RKWARD_FRONTEND_LOCATION ${KDE_INSTALL_LIBEXECDIR})
+# once tested and working this could become the default on Mac:
+OPTION(APPLE_STANDALONE_BUNDLE "Generate a standalone app bundle when building on Mac" OFF)
+ADD_FEATURE_INFO("App Bundle" APPLE_STANDALONE_BUNDLE "Generate a standalone app bundle when building on Mac. Do not use for now.")
ADD_SUBDIRECTORY( dataeditor )
ADD_SUBDIRECTORY( settings )
@@ -38,11 +42,20 @@ GET_DIRECTORY_PROPERTY(R_EXECUTABLE DIRECTORY rbackend DEFINITION R_EXECUTABLE)
GET_DIRECTORY_PROPERTY(R_SHAREDLIBDIR DIRECTORY rbackend LINK_DIRECTORIES)
LINK_DIRECTORIES(${R_SHAREDLIBDIR})
-ADD_CUSTOM_COMMAND (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rkward.ico"
+IF(APPLE)
+ # create the application icon from the available sources. This should work on MS Windows
+ # too but I don't want to start modifying things I cannot test.
+ FILE(GLOB ICON_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/icons/app-icon/*-apps-rkward.png")
+ # recent ECM versions will prefer the scalable version: prepend it to the icon source list:
+ ECM_ADD_APP_ICON(RKWard_Sources ICONS ${CMAKE_CURRENT_SOURCE_DIR}/icons/app-icon/sc-apps-rkward.svgz ${ICON_SRCS})
+ ADD_EXECUTABLE(rkward ${RKWard_Sources})
+ELSE()
+ ADD_CUSTOM_COMMAND (OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/rkward.ico"
COMMAND cmake -E copy "${CMAKE_CURRENT_SOURCE_DIR}/icons/app-icon/rkward.ico"
"${CMAKE_CURRENT_BINARY_DIR}/rkward.ico")
+ ADD_EXECUTABLE(rkward ${RKWard_Sources} rkward_windows_icon.rc rkward.ico)
+ENDIF()
-ADD_EXECUTABLE(rkward ${RKWard_Sources} rkward_windows_icon.rc rkward.ico)
# NOTE: These definitions are needed for the startup procedure (main.cpp), only.
# We should switch with to target_compile_definitions once we require CMAKE 2.6+
ADD_DEFINITIONS(-DR_EXECUTABLE="${R_EXECUTABLE}")
@@ -51,14 +64,14 @@ ADD_DEFINITIONS(-DR_LIBS="${R_LIBDIR}")
SET_TARGET_PROPERTIES(rkward PROPERTIES
MACOSX_BUNDLE_BUNDLE_NAME "RKWard")
-IF(Q_WS_MAC)
+IF(APPLE)
SET(RKWARD_INFOPLIST_TEMPLATE Info.plist.in)
SET(RKWARD_INFOPLIST_FILE ${CMAKE_SOURCE_DIR}/rkward/Info.plist)
CONFIGURE_FILE(
${RKWARD_INFOPLIST_TEMPLATE}
${RKWARD_INFOPLIST_FILE}
@ONLY)
-ENDIF(Q_WS_MAC)
+ENDIF(APPLE)
TARGET_LINK_LIBRARIES(rkward windows ${RKWARD_ADDLIBS} agents dialogs plugin settings dataeditor core scriptbackends rbackend misc KF5::WindowSystem Qt5::Widgets KF5::XmlGui ${LibIntl_LIBRARIES})
IF(KF5Crash_FOUND)
@@ -73,12 +86,29 @@ INSTALL(DIRECTORY plugins/ pages DESTINATION ${DATA_INSTALL_DIR}/rkward
INSTALL(FILES rkwardui.rc rkconsolepart.rc DESTINATION ${KXMLGUI_INSTALL_DIR}/rkward)
INSTALL(FILES resource.ver DESTINATION ${DATA_INSTALL_DIR}/rkward)
-INSTALL(TARGETS rkward DESTINATION ${BIN_INSTALL_DIR})
-IF(Q_WS_MAC)
- INSTALL(FILES ${CMAKE_SOURCE_DIR}/rkward/icons/app-icon/rkward.icns DESTINATION ${BUNDLE_INSTALL_DIR}/${CPACK_BUNDLE_NAME}.app/Contents/Resources)
- INSTALL(FILES ${RKWARD_INFOPLIST_FILE} DESTINATION ${BUNDLE_INSTALL_DIR}/${CPACK_BUNDLE_NAME}.app/Contents)
-ENDIF(Q_WS_MAC)
+IF(APPLE)
+ INSTALL(TARGETS rkward DESTINATION ${BUNDLE_INSTALL_DIR})
+ if(APPLE_STANDALONE_BUNDLE)
+# INSTALL(FILES ${CMAKE_SOURCE_DIR}/rkward/icons/app-icon/rkward.icns DESTINATION ${BUNDLE_INSTALL_DIR}/${CPACK_BUNDLE_NAME}.app/Contents/Resources)
+# INSTALL(FILES ${RKWARD_INFOPLIST_FILE} DESTINATION ${BUNDLE_INSTALL_DIR}/${CPACK_BUNDLE_NAME}.app/Contents)
+ ENDIF()
+ # the MacOSX bundle display name property (CFBundleDisplayName) is not currently supported by cmake,
+ # so has to be set for all targets in this cmake file
+ SET(MACOSX_BUNDLE_DISPLAY_NAME RKWard)
+ # We provide our own Info.plist, but for the wrapper only
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${RKWARD_INFOPLIST_FILE})
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "org.kde.RKWard")
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "RKWard")
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_DISPLAY_NAME "RKWard")
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_INFO_STRING "Frontend to the R statistics language")
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_LONG_VERSION_STRING "RKWard ${RKVERSION_NUMBER}")
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_SHORT_VERSION_STRING "${RKVERSION_NUMBER}")
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_BUNDLE_VERSION "${RKVERSION_NUMBER}")
+ set_target_properties(rkward PROPERTIES MACOSX_BUNDLE_COPYRIGHT "RKWard Team")
+ELSE()
+ INSTALL(TARGETS rkward DESTINATION ${BIN_INSTALL_DIR})
+ENDIF()
INSTALL(FILES org.kde.rkward.desktop org.kde.rkward-open.desktop DESTINATION ${XDG_APPS_INSTALL_DIR})
INSTALL(FILES vnd.rkward.r.xml DESTINATION ${XDG_MIME_INSTALL_DIR})
diff --git a/rkward/rbackend/CMakeLists.txt b/rkward/rbackend/CMakeLists.txt
index e4116695..9fb90a6f 100644
--- a/rkward/rbackend/CMakeLists.txt
+++ b/rkward/rbackend/CMakeLists.txt
@@ -54,9 +54,10 @@ SET (
rktransmitter.cpp
)
ADD_DEFINITIONS (-DRKWARD_SPLIT_PROCESS)
-ADD_DEFINITIONS (-DRKWARD_BACKEND_PATH="${CMAKE_INSTALL_PREFIX}/${LIBEXEC_INSTALL_DIR}")
+ADD_DEFINITIONS (-DRKWARD_BACKEND_PATH="${KDE_INSTALL_LIBEXECDIR}")
LINK_DIRECTORIES(${R_SHAREDLIBDIR})
ADD_EXECUTABLE(rkward.rbackend ${rbackend_BACKEND_SRCS})
+ECM_MARK_NONGUI_EXECUTABLE(rkward.rbackend)
TARGET_LINK_LIBRARIES(rkward.rbackend rkgraphicsdevice.backend ${R_USED_LIBS} ${CMAKE_THREAD_LIBS_INIT} Qt5::Network Qt5::Core ${LibIntl_LIBRARIES})
IF(WIN32)
More information about the rkward-tracker
mailing list