Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add: [CMake] Install menu and media files #8834

Merged
merged 2 commits into from
Mar 9, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -221,14 +221,15 @@ if(MSVC)
endif()

add_subdirectory(${CMAKE_SOURCE_DIR}/src)
add_subdirectory(${CMAKE_SOURCE_DIR}/media/baseset)
add_subdirectory(${CMAKE_SOURCE_DIR}/media)

add_dependencies(openttd
find_version)

target_link_libraries(openttd
openttd::languages
openttd::settings
openttd::media
openttd::basesets
openttd::script_api
Threads::Threads
Expand Down
14 changes: 12 additions & 2 deletions cmake/InstallAndPackage.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,18 @@ if(OPTION_INSTALL_FHS)
COMPONENT manual)
endif()

# TODO -- Media files
# TODO -- Menu files
if(UNIX AND NOT APPLE)
install(DIRECTORY
${CMAKE_BINARY_DIR}/media/icons
${CMAKE_BINARY_DIR}/media/pixmaps
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}
COMPONENT media)

install(FILES
${CMAKE_BINARY_DIR}/media/${BINARY_NAME}.desktop
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications
COMPONENT menu)
endif()

if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
set(ARCHITECTURE "amd64")
Expand Down
10 changes: 10 additions & 0 deletions cmake/scripts/Baseset.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@ cmake_minimum_required(VERSION 3.5)
# Create a single baseset meta file with the correct translations.
#

if(NOT BASESET_SOURCE_FILE)
message(FATAL_ERROR "Script needs BASESET_SOURCE_FILE defined")
endif()
if(NOT BASESET_BINARY_FILE)
message(FATAL_ERROR "Script needs BASESET_BINARY_FILE defined")
endif()
if(NOT BASESET_EXTRAGRF_FILE)
message(FATAL_ERROR "Script needs BASESET_EXTRAGRF_FILE defined")
endif()

set(ARGC 1)
set(ARG_READ NO)

Expand Down
60 changes: 60 additions & 0 deletions cmake/scripts/Desktop.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
cmake_minimum_required(VERSION 3.5)

#
# Create a desktop file with the correct translations.
#

if(NOT DESKTOP_SOURCE_FILE)
message(FATAL_ERROR "Script needs DESKTOP_SOURCE_FILE defined")
endif()
if(NOT DESKTOP_BINARY_FILE)
message(FATAL_ERROR "Script needs DESKTOP_BINARY_FILE defined")
endif()
if(NOT BINARY_NAME)
message(FATAL_ERROR "Script needs BINARY_NAME defined")
endif()

set(ARGC 1)
set(ARG_READ NO)

# Read all the arguments given to CMake; we are looking for -- and everything
# that follows. Those are our language files.
while(ARGC LESS CMAKE_ARGC)
set(ARG ${CMAKE_ARGV${ARGC}})

if(ARG_READ)
list(APPEND LANG_SOURCE_FILES "${ARG}")
endif()

if(ARG STREQUAL "--")
set(ARG_READ YES)
endif()

math(EXPR ARGC "${ARGC} + 1")
endwhile()

# Place holder format is @<ini_key>_<str_id>@
file(STRINGS "${DESKTOP_SOURCE_FILE}" PLACE_HOLDER REGEX "^@")
string(REGEX REPLACE "@([^_]+).*@" "\\1" INI_KEY "${PLACE_HOLDER}")
string(REGEX REPLACE "@[^_]+_(.*)@" "\\1" STR_ID "${PLACE_HOLDER}")
string(REGEX REPLACE "@(.*)@" "\\1" PLACE_HOLDER "${PLACE_HOLDER}")

# Get the translations
foreach(LANGFILE IN LISTS LANG_SOURCE_FILES)
file(STRINGS "${LANGFILE}" LANGLINES REGEX "^(##isocode|${STR_ID})" ENCODING UTF-8)
string(FIND "${LANGLINES}" "${STR_ID}" HAS_STR_ID)
if(HAS_STR_ID LESS 0)
continue()
endif()
string(REGEX REPLACE "##isocode ([^;]+).*" "\\1" ISOCODE "${LANGLINES}")
if("${ISOCODE}" STREQUAL "en_GB")
string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY}=\\1" LANGLINES "${LANGLINES}")
else()
string(REGEX REPLACE "[^:]*:(.*)" "${INI_KEY}[${ISOCODE}]=\\1" LANGLINES "${LANGLINES}")
endif()
list(APPEND ${PLACE_HOLDER} ${LANGLINES})
endforeach()
list(SORT ${PLACE_HOLDER})
string(REPLACE ";" "\n" ${PLACE_HOLDER} "${${PLACE_HOLDER}}")

configure_file(${DESKTOP_SOURCE_FILE} ${DESKTOP_BINARY_FILE})
98 changes: 98 additions & 0 deletions media/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
add_subdirectory(baseset)

add_library(media
INTERFACE
)
add_library(openttd::media ALIAS media)

if(NOT UNIX OR APPLE)
return()
endif()

set(MEDIA_PNG_SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/openttd.16.png
${CMAKE_CURRENT_SOURCE_DIR}/openttd.32.png
${CMAKE_CURRENT_SOURCE_DIR}/openttd.48.png
${CMAKE_CURRENT_SOURCE_DIR}/openttd.64.png
${CMAKE_CURRENT_SOURCE_DIR}/openttd.128.png
${CMAKE_CURRENT_SOURCE_DIR}/openttd.256.png
)

# Walk over all the png files, and generate a command to copy them
foreach(MEDIA_PNG_SOURCE_FILE IN LISTS MEDIA_PNG_SOURCE_FILES)
get_filename_component(MEDIA_PNG_FILE_NAME "${MEDIA_PNG_SOURCE_FILE}" NAME)
string(REGEX REPLACE "[^.]+.([0-9]*).*" "${CMAKE_CURRENT_BINARY_DIR}/icons/hicolor/\\1x\\1/apps/${BINARY_NAME}.png" MEDIA_PNG_BINARY_FILE "${MEDIA_PNG_FILE_NAME}")

add_custom_command(OUTPUT ${MEDIA_PNG_BINARY_FILE}
COMMAND ${CMAKE_COMMAND} -E copy
${MEDIA_PNG_SOURCE_FILE}
${MEDIA_PNG_BINARY_FILE}
MAIN_DEPENDENCY ${MEDIA_PNG_SOURCE_FILE}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Copying ${MEDIA_PNG_FILE_NAME} file"
)

list(APPEND MEDIA_BINARY_FILES ${MEDIA_PNG_BINARY_FILE})
endforeach()

set(MEDIA_XPM_SOURCE_FILES
${CMAKE_CURRENT_SOURCE_DIR}/openttd.32.xpm
${CMAKE_CURRENT_SOURCE_DIR}/openttd.64.xpm
)

# Walk over all the xpm files, and generate a command to copy them
foreach(MEDIA_XPM_SOURCE_FILE IN LISTS MEDIA_XPM_SOURCE_FILES)
get_filename_component(MEDIA_XPM_FILE_NAME "${MEDIA_XPM_SOURCE_FILE}" NAME)
get_filename_component(MEDIA_XPM_FILE_EXT "${MEDIA_XPM_FILE_NAME}" EXT)
set(MEDIA_XPM_BINARY_FILE "${CMAKE_CURRENT_BINARY_DIR}/pixmaps/${BINARY_NAME}${MEDIA_XPM_FILE_EXT}")

add_custom_command(OUTPUT ${MEDIA_XPM_BINARY_FILE}
COMMAND ${CMAKE_COMMAND} -E copy
${MEDIA_XPM_SOURCE_FILE}
${MEDIA_XPM_BINARY_FILE}
MAIN_DEPENDENCY ${MEDIA_XPM_SOURCE_FILE}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Copying ${MEDIA_XPM_FILE_NAME} file"
)

list(APPEND MEDIA_BINARY_FILES ${MEDIA_XPM_BINARY_FILE})
endforeach()

# Create a new target which copies media files
add_custom_target(media_files
DEPENDS
${MEDIA_BINARY_FILES}
)

add_dependencies(media
media_files
)

get_target_property(LANG_SOURCE_FILES language_files LANG_SOURCE_FILES)

set(DESKTOP_BINARY_NAME ${BINARY_NAME}.desktop)

add_custom_command_timestamp(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_BINARY_NAME}
COMMAND ${CMAKE_COMMAND}
-DDESKTOP_SOURCE_FILE=${CMAKE_CURRENT_SOURCE_DIR}/openttd.desktop
-DDESKTOP_BINARY_FILE=${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_BINARY_NAME}
-DBINARY_NAME=${BINARY_NAME}
-P ${CMAKE_SOURCE_DIR}/cmake/scripts/Desktop.cmake
--
${LANG_SOURCE_FILES}
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/openttd.desktop
DEPENDS ${LANG_SOURCE_FILES}
${CMAKE_SOURCE_DIR}/cmake/scripts/Desktop.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "Generating desktop file"
)

# Create a new target which generates desktop file
add_custom_target_timestamp(desktop_file
DEPENDS
${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_BINARY_NAME}
)

add_dependencies(media
desktop_file
)
10 changes: 5 additions & 5 deletions media/openttd.desktop.in → media/openttd.desktop
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
[Desktop Entry]
Type=Application
Version=1.0
Name=!!MENU_NAME!!
Icon=!!TTD!!
Exec=!!TTD!!
Name=OpenTTD
Icon=${BINARY_NAME}
Exec=${BINARY_NAME}
Terminal=false
Categories=!!MENU_GROUP!!
Comment=A clone of Transport Tycoon Deluxe
Categories=Game;
Keywords=game;simulation;transport;tycoon;deluxe;economics;multiplayer;money;train;ship;bus;truck;aircraft;cargo;
@Comment_STR_DESKTOP_SHORTCUT_COMMENT@
11 changes: 0 additions & 11 deletions media/openttd.desktop.filter.awk

This file was deleted.

13 changes: 0 additions & 13 deletions media/openttd.desktop.translation.awk

This file was deleted.