summaryrefslogtreecommitdiffstats
path: root/desktop/CMakeLists.txt
blob: 6dc3d1cb1661927ae7265f4bf0b08994002272f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
cmake_minimum_required(VERSION 2.8)

set(COLOBOT_ICON_FILE colobot.svg)

# Render SVG icon in various sizes
find_program(RSVG_CONVERT rsvg-convert)
if(RSVG_CONVERT AND (PLATFORM_LINUX OR PLATFORM_MACOSX))
    add_custom_target(png-icons ALL)
    foreach(PNGSIZE 512 256 128 48 32 16)
        add_custom_command(
            OUTPUT ${PNGSIZE}/colobot.png
            COMMAND mkdir -p ${PNGSIZE}
            COMMAND ${RSVG_CONVERT} -w ${PNGSIZE} -h ${PNGSIZE} ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE} > ${PNGSIZE}/colobot.png
            )
        add_custom_target(png-icon-${PNGSIZE} ALL DEPENDS ${PNGSIZE}/colobot.png)
        add_dependencies(png-icons png-icon-${PNGSIZE})

        if(PLATFORM_LINUX)
            install(
                FILES ${CMAKE_CURRENT_BINARY_DIR}/${PNGSIZE}/colobot.png
                DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/${PNGSIZE}x${PNGSIZE}/apps/
                )
        endif()
        # Prepare the ICNS icon generation
        list(APPEND ICNS_SRCS "${PNGSIZE}/colobot.png")
    endforeach()
    
    # Pack icon for Mac OS
    find_program(PNG2ICNS png2icns)
    if(PNG2ICNS AND PLATFORM_MACOSX)
        add_custom_command(OUTPUT Colobot.icns
            COMMAND ${PNG2ICNS} Colobot.icns ${ICNS_SRCS}
            DEPENDS png-icons
            )
        add_custom_target(icns-icon ALL DEPENDS Colobot.icns)
        install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Colobot.icns
                DESTINATION ${CMAKE_INSTALL_PREFIX}/Contents/Resources/
               )
    endif()

endif()

if(PLATFORM_LINUX)
    # Install Desktop Entry file
    set(COLOBOT_DESKTOP_FILE colobot.desktop)
    add_custom_command(
        OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
        COMMAND ./create_desktop_file.sh > ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
        WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
        COMMENT "Build ${COLOBOT_DESKTOP_FILE}"
        )
    add_custom_target(desktopfile ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE})
    install(
        FILES ${CMAKE_CURRENT_BINARY_DIR}/${COLOBOT_DESKTOP_FILE}
            DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications/
        )

    # Install Icon
    install(
        FILES ${CMAKE_CURRENT_SOURCE_DIR}/${COLOBOT_ICON_FILE}
        DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps/
        )

    # Translate translatable material
    find_program(PO4A po4a)
    if(PO4A)
        add_custom_target(desktop_po4a
            COMMAND ${PO4A} po4a.cfg
            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
        )
        add_dependencies(desktopfile desktop_po4a)
    endif()

    # Create manpage from pod-formatted file
    find_program(POD2MAN pod2man)
    if(POD2MAN)
        set(COLOBOT_MANPAGE_SECTION 6)

        macro(podman)
            cmake_parse_arguments(PM "" "PODFILE;LOCALE;" "" ${ARGN})
            if(PM_LOCALE)
                # This copes with the fact that english has no "/LANG" in the paths and filenames.
                set(SLASHLOCALE /${PM_LOCALE})
            endif()
            file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE})
            add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
                       DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${PM_PODFILE}
                       COMMAND ${POD2MAN} ARGS --section=${COLOBOT_MANPAGE_SECTION}
                                          --center="Colobot" --stderr --utf8
                                          --release="${COLOBOT_VERSION_FULL}"
                                          ${CMAKE_CURRENT_SOURCE_DIR}/${PM_PODFILE}
                                          ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
               COMMENT "Create ${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION} manpage"
                      )
            add_custom_target(man${PM_LOCALE} ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION})

            install(
                FILES ${CMAKE_CURRENT_BINARY_DIR}${SLASHLOCALE}/colobot.${COLOBOT_MANPAGE_SECTION}
                    DESTINATION ${CMAKE_INSTALL_PREFIX}/share/man${SLASHLOCALE}/man${COLOBOT_MANPAGE_SECTION}/ )

            add_dependencies(man man${PM_LOCALE})
        endmacro()

        # Create the english manpage
        podman(PODFILE colobot.pod)

        if(PO4A)
            # Translate the manpage to other languages
            add_dependencies(man desktop_po4a)
            file(GLOB LINGUAS_PO RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/po/ ${CMAKE_CURRENT_SOURCE_DIR}/po/*.po)
            string(REGEX REPLACE ".po$" "" LINGUAS ${LINGUAS_PO})
            foreach(LOCALE ${LINGUAS})
                podman(PODFILE lang/${LOCALE}/colobot.pod LOCALE ${LOCALE})
                add_dependencies(man${PM_LOCALE} desktop_po4a)
            endforeach()
        endif()
    endif()
endif(PLATFORM_LINUX)

if(PLATFORM_MACOSX)
    configure_file(Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist)
    install(FILES ${CMAKE_CURRENT_BINARY_DIR}/Info.plist
            DESTINATION ${CMAKE_INSTALL_PREFIX}/Contents/
           )
endif(PLATFORM_MACOSX)

if(PLATFORM_WINDOWS)
    set(COLOBOT_VERSION_4COMMAS "${COLOBOT_VERSION_MAJOR},${COLOBOT_VERSION_MINOR},${COLOBOT_VERSION_REVISION},0")
    configure_file(colobot.rc.cmake ${CMAKE_CURRENT_BINARY_DIR}/colobot.rc)
endif(PLATFORM_WINDOWS)