Skip to content

Commit

Permalink
SDK: Flexible out-of-project customization for launchers/plugins
Browse files Browse the repository at this point in the history
  • Loading branch information
victor-yacovlev committed Apr 26, 2017
1 parent 3215839 commit ae66d03
Show file tree
Hide file tree
Showing 65 changed files with 252 additions and 2,720 deletions.
26 changes: 9 additions & 17 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ install(
WORLD_EXECUTE WORLD_READ
)
install(DIRECTORY cmake/ DESTINATION "${KUMIR2_SDK_CMAKE_DIR}")
install(FILES src/app/kumir2-launcher.cpp DESTINATION ${KUMIR2_SDK_SRC_DIR})

# Generate and install CMake file describing current build configuration
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/distribution_build_config.cmake" "# Installed build configuration\n")
Expand All @@ -76,23 +77,14 @@ install(
DESTINATION "${KUMIR2_SDK_CMAKE_DIR}/kumir2"
)


# Platform-specific global resources handling
if(WIN32)
# Do nothing
elseif(APPLE)
# TODO Make package-related stuff
else()
# Create XDG-compliant filesystem structure for applciations and icons

# Application icons
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_XDG_ICONS_DIR}")
file(GLOB_RECURSE icons RELATIVE ${CMAKE_SOURCE_DIR}/app_icons/linux ${CMAKE_SOURCE_DIR}/app_icons/linux/*)
# XDG mime types handling
if(NOT WIN32 AND NOT APPLE)
set(ICONS_DIR "${CMAKE_SOURCE_DIR}/app_icons/linux/hicolor")
message(STATUS "icons dir : ${ICONS_DIR}")
file(GLOB_RECURSE icons RELATIVE ${ICONS_DIR} "${ICONS_DIR}/*/mimetypes/*.*")
foreach(icon IN ITEMS ${icons})
get_filename_component(subdir ${icon} PATH)
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_XDG_ICONS_DIR}/${subdir}")
file(COPY "${CMAKE_SOURCE_DIR}/app_icons/linux/${icon}" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_XDG_ICONS_DIR}/${subdir}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${KUMIR2_XDG_ICONS_DIR}/${icon}" DESTINATION "${KUMIR2_XDG_ICONS_DIR}/${subdir}")
install(FILES "${ICONS_DIR}/${icon}" DESTINATION "${KUMIR2_XDG_ICONS_DIR}/${subdir}")
endforeach(icon)
endif()

install(FILES "${CMAKE_SOURCE_DIR}/share/mime/packages/kumir2-mimetypes.xml" DESTINATION ${KUMIR2_XDG_MIME_PACKAGES_DIR})
endif(NOT WIN32 AND NOT APPLE)
File renamed without changes.
Binary file removed app_icons/win32/kumir2-python.ico
Binary file not shown.
95 changes: 85 additions & 10 deletions cmake/kumir2/kumir2_common.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -288,19 +288,61 @@ function(kumir2_add_actor)
endfunction(kumir2_add_actor)

function(kumir2_add_launcher)
cmake_parse_arguments(PARSED_ARGS "" "NAME;SPLASHSCREEN;CONFIGURATION" "" ${ARGN})
set(LAUNCHER_SOURCES "${CMAKE_SOURCE_DIR}/src/app/main.cpp")
cmake_parse_arguments(PARSED_ARGS "" "NAME;SPLASHSCREEN;CONFIGURATION;WINDOW_ICON;APP_ICON_NAME;X_ICONS_DIR;WIN_ICONS_DIR;X_NAME;X_NAME_ru;X_CATEGORIES" "" ${ARGN})
if(EXISTS "${CMAKE_SOURCE_DIR}/src/app/kumir2-launcher.cpp")
set(LAUNCHER_SOURCES "${CMAKE_SOURCE_DIR}/src/app/kumir2-launcher.cpp")
else()
set(LAUNCHER_SOURCES "${KUMIR2_SDK_SRC_DIR}/kumir2-launcher.cpp")
endif()
if(PARSED_ARGS_APP_ICON_NAME)
if(WIN32)
if(PARSED_ARGS_WIN_ICONS_DIR)
set(ICONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_WIN_ICONS_DIR}/")
else()
set(ICONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/")
endif()
elseif(NOT APPLE)
if(PARSED_ARGS_X_ICONS_DIR)
set(ICONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_X_ICONS_DIR}/")
else()
set(ICONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/")
endif()
endif()
endif(PARSED_ARGS_APP_ICON_NAME)
kumir2_use_qt(Core Gui)
if(WIN32 AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.rc")
list(APPEND LAUNCHER_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_NAME}.rc")
add_executable(${PARSED_ARGS_NAME} WIN32 ${LAUNCHER_SOURCES})
set(QRC_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PARSED_ARGS_NAME}.qrc")
file(WRITE ${QRC_FILE} "<RCC>\n")
file(APPEND ${QRC_FILE} "<qresource prefix=\"/kumir2-launcher\">\n")
if(PARSED_ARGS_SPLASHSCREEN)
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_SPLASHSCREEN}" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(APPEND ${QRC_FILE} "<file>")
file(APPEND ${QRC_FILE} "${PARSED_ARGS_SPLASHSCREEN}")
file(APPEND ${QRC_FILE} "</file>\n")
endif()
if(PARSED_ARGS_WINDOW_ICON)
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/${PARSED_ARGS_WINDOW_ICON}" DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
file(APPEND ${QRC_FILE} "<file>")
file(APPEND ${QRC_FILE} "${PARSED_ARGS_WINDOW_ICON}")
file(APPEND ${QRC_FILE} "</file>\n")
endif()
file(APPEND ${QRC_FILE} "</qresource>\n</RCC>\n")
set_source_files_properties(${QRC_FILE} PROPERTIES GENERATED ON)
kumir2_add_resources(QRC_SRC ${QRC_FILE})
if(WIN32 AND EXISTS "${ICONS_DIR}/${PARSED_APP_ICON_NAME}.ico")
set(WIN_RC_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PARSED_ARGS_NAME}.rc")
set_source_files_properties(${WIN_RC_FILE} PROPERTIES GENERATED ON)
set(ICON_PATH "${ICONS_DIR}/${PARSED_APP_ICON_NAME}.ico")
string(REPLACE "/" "\\\\" ICON_NATIVE_PATH ${ICON_PATH})
file(WRITE ${WIN_RC_FILE} "IDI_ICON1 ICON DISCARDABLE \"${ICON_NATIVE_PATH}\"\r\n")
list(APPEND LAUNCHER_SOURCES ${WIN_RC_FILE})
add_executable(${PARSED_ARGS_NAME} WIN32 ${LAUNCHER_SOURCES} ${QRC_SRC})
if(${USE_QT} GREATER 4)
list(APPEND QT_LIBRARIES ${Qt5Core_QTMAIN_LIBRARIES})
else()
list(APPEND QT_LIBRARIES ${QT_QTMAIN_LIBRARY})
endif()
else()
add_executable(${PARSED_ARGS_NAME} ${LAUNCHER_SOURCES})
add_executable(${PARSED_ARGS_NAME} ${LAUNCHER_SOURCES} ${QRC_SRC})
endif()
target_link_libraries(${PARSED_ARGS_NAME} ${QT_LIBRARIES} ExtensionSystem)
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY COMPILE_FLAGS "${KUMIR2_CXXFLAGS} ${KUMIR2_CXXFLAGS_${CMAKE_BUILD_TYPE}}")
Expand All @@ -309,6 +351,9 @@ function(kumir2_add_launcher)
if(PARSED_ARGS_SPLASHSCREEN)
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY COMPILE_DEFINITIONS SPLASHSCREEN="${PARSED_ARGS_SPLASHSCREEN}")
endif(PARSED_ARGS_SPLASHSCREEN)
if(PARSED_ARGS_WINDOW_ICON)
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY COMPILE_DEFINITIONS WINDOW_ICON="${PARSED_ARGS_WINDOW_ICON}")
endif(PARSED_ARGS_WINDOW_ICON)
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY COMPILE_DEFINITIONS KUMIR2_PLUGINS_DIR="${KUMIR2_PLUGINS_DIR}")
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY COMPILE_DEFINITIONS KUMIR2_RESOURCES_DIR="${KUMIR2_RESOURCES_DIR}")
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY COMPILE_DEFINITIONS KUMIR2_EXEC_DIR="${KUMIR2_EXEC_DIR}")
Expand All @@ -317,10 +362,40 @@ function(kumir2_add_launcher)
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY RUNTIME_OUTPUT_DIRECTORY_DEBUG "${CMAKE_BINARY_DIR}/${KUMIR2_EXEC_DIR}")
set_property(TARGET ${PARSED_ARGS_NAME} APPEND PROPERTY RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_BINARY_DIR}/${KUMIR2_EXEC_DIR}")
install(TARGETS ${PARSED_ARGS_NAME} DESTINATION ${KUMIR2_EXEC_DIR})
if(KUMIR2_XDG_APPLICATIONS_DIR AND EXISTS "${CMAKE_SOURCE_DIR}/${PARSED_ARGS_NAME}.desktop")
file(COPY "${CMAKE_SOURCE_DIR}/${PARSED_ARGS_NAME}.desktop" DESTINATION "${CMAKE_BINARY_DIR}/${KUMIR2_XDG_APPLICATION_DIR}")
install(FILES "${CMAKE_BINARY_DIR}/${KUMIR2_XDG_APPLICATION_DIR}/${PARSED_ARGS_NAME}.desktop" DESTINATION ${KUMIR2_XDG_APPLICATIONS_DIR})
endif()
if(KUMIR2_XDG_APPLICATIONS_DIR AND PARSED_ARGS_X_NAME)
set(DESKTOP_FILE "${CMAKE_CURRENT_BINARY_DIR}/${PARSED_ARGS_NAME}.desktop")
file(WRITE ${DESKTOP_FILE} "[Desktop Entry]\n")
file(APPEND ${DESKTOP_FILE} "Type=Application\n")
file(APPEND ${DESKTOP_FILE} "Exec=${PARSED_ARGS_NAME} %U\n")
if(PARSED_ARGS_APP_ICON_NAME)
file(APPEND ${DESKTOP_FILE} "Icon=${PARSED_ARGS_APP_ICON_NAME}\n")
endif(PARSED_ARGS_APP_ICON_NAME)
file(APPEND ${DESKTOP_FILE} "Name=${PARSED_ARGS_X_NAME}\n")
if(PARSED_ARGS_X_NAME_ru) # TODO make support for several languages
file(APPEND ${DESKTOP_FILE} "Name[ru]=${PARSED_ARGS_X_NAME_ru}\n")
endif(PARSED_ARGS_X_NAME_ru)
if(PARSED_ARGS_X_CATEGORIES)
string(REPLACE "," ";" X_CATS ${PARSED_ARGS_X_CATEGORIES})
file(APPEND ${DESKTOP_FILE} "Categories=${X_CATS};\n")
endif(PARSED_ARGS_X_CATEGORIES)
set_source_files_properties(${DESKTOP_FILE} PROPERTIES GENERATED ON)
install(FILES ${DESKTOP_FILE} DESTINATION ${KUMIR2_XDG_APPLICATIONS_DIR})
endif(KUMIR2_XDG_APPLICATIONS_DIR AND PARSED_ARGS_X_NAME)
if(PARSED_ARGS_APP_ICON_NAME AND NOT WIN32 AND NOT APPLE)
if(KUMIR2_XDG_ICONS_DIR)
file(GLOB_RECURSE icons RELATIVE ${ICONS_DIR} "${ICONS_DIR}/*/apps/${PARSED_ARGS_APP_ICON_NAME}.*")
foreach(icon IN ITEMS ${icons})
get_filename_component(subdir ${icon} PATH)
install(FILES "${ICONS_DIR}/${icon}" DESTINATION "${KUMIR2_XDG_ICONS_DIR}/${subdir}")
endforeach(icon)
endif(KUMIR2_XDG_ICONS_DIR)
if(KUMIR2_XDG_PIXMAPS_DIR AND EXISTS "${ICONS_DIR}/${PARSED_ARGS_APP_ICON_NAME}.png")
install(FILES "${ICONS_DIR}/${PARSED_ARGS_APP_ICON_NAME}.png" DESTINATION "${KUMIR2_XDG_PIXMAPS_DIR}")
endif()
if(KUMIR2_XDG_PIXMAPS_DIR AND EXISTS "${ICONS_DIR}/${PARSED_ARGS_APP_ICON_NAME}.svg")
install(FILES "${ICONS_DIR}/${PARSED_ARGS_APP_ICON_NAME}.svg" DESTINATION "${KUMIR2_XDG_PIXMAPS_DIR}")
endif()
endif(PARSED_ARGS_APP_ICON_NAME AND NOT WIN32 AND NOT APPLE)
endfunction(kumir2_add_launcher)

function(kumir2_add_tool)
Expand Down
5 changes: 5 additions & 0 deletions cmake/kumir2/kumir2_linux.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ set(KUMIR2_PLUGINS_DIR "${LIB_BASENAME}/kumir2/plugins") # libraries to be lo
set(KUMIR2_RESOURCES_DIR "share/kumir2") # non-executable resources
set(KUMIR2_XDG_APPLICATIONS_DIR "share/applications") # X applications catalog
set(KUMIR2_XDG_ICONS_DIR "share/icons") # X icons catalog
set(KUMIR2_XDG_PIXMAPS_DIR "share/pixmaps") # X pixmaps directory
set(KUMIR2_XDG_MIME_PACKAGES_DIR "share/mime/packages") # X MIME packages catalog

if(NOT DEFINED KUMIR2_LIBEXECS_DIR)
Expand All @@ -33,6 +34,10 @@ if(NOT DEFINED KUMIR2_SDK_CMAKE_DIR)
set(KUMIR2_SDK_CMAKE_DIR "${LIB_BASENAME}/cmake/Kumir2") # cmake files to use from others
endif(NOT DEFINED KUMIR2_SDK_CMAKE_DIR)

if(NOT DEFINED KUMIR2_SDK_SRC_DIR)
set(KUMIR2_SDK_SRC_DIR "${KUMIR2_RESOURCES_DIR}/src")
endif(NOT DEFINED KUMIR2_SDK_SRC_DIR) # sources required to build some components (launchers, etc.)

# clear default CMake RPATH values
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
Expand Down
7 changes: 0 additions & 7 deletions kumir2-classic.desktop

This file was deleted.

7 changes: 0 additions & 7 deletions kumir2-highgrade.desktop

This file was deleted.

8 changes: 0 additions & 8 deletions kumir2-ide.desktop

This file was deleted.

Loading

0 comments on commit ae66d03

Please sign in to comment.