|
| 1 | +cmake_minimum_required(VERSION 3.13) |
| 2 | + |
| 3 | +project(lwp |
| 4 | + LANGUAGES C) |
| 5 | + |
| 6 | +if(SDL2_RUNTIME_DIR) |
| 7 | + string(REPLACE "\\" "/" SDL2_RUNTIME_DIR ${SDL2_RUNTIME_DIR}) |
| 8 | +endif() |
| 9 | + |
| 10 | +# Detect the platform |
| 11 | +if (APPLE) |
| 12 | + set(_UNAME "DARWIN") |
| 13 | +elseif (WIN32) |
| 14 | + set(_UNAME "WIN32") |
| 15 | +else() |
| 16 | + set(_UNAME "LINUX") |
| 17 | +endif() |
| 18 | + |
| 19 | +# Detect version |
| 20 | +find_package(Git) |
| 21 | +if(Git_FOUND) |
| 22 | + execute_process( |
| 23 | + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty --match "v*" |
| 24 | + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
| 25 | + OUTPUT_VARIABLE GIT_DESCRIBE_VERSION |
| 26 | + RESULT_VARIABLE GIT_DESCRIBE_ERROR_CODE |
| 27 | + OUTPUT_STRIP_TRAILING_WHITESPACE |
| 28 | + ) |
| 29 | + if(NOT GIT_DESCRIBE_ERROR_CODE) |
| 30 | + set(PROGRAM_VERSION ${GIT_DESCRIBE_VERSION}) |
| 31 | + endif() |
| 32 | +endif() |
| 33 | +if(NOT DEFINED PROGRAM_VERSION) |
| 34 | + set(PROGRAM_VERSION v0.0.0-unknown) |
| 35 | + message(WARNING "Can't determine Layered WallPaper version") |
| 36 | +endif() |
| 37 | + |
| 38 | +set(_SOURCE_FILES |
| 39 | + main.c |
| 40 | + debug.c |
| 41 | + parser.c |
| 42 | + wallpaper.c |
| 43 | + window.c |
| 44 | + ) |
| 45 | + |
| 46 | +# Windows resource file |
| 47 | +if(_UNAME STREQUAL "WIN32") |
| 48 | + if(MINGW) |
| 49 | + set(CMAKE_RC_COMPILER_INIT windres) |
| 50 | + ENABLE_LANGUAGE(RC) |
| 51 | + SET(CMAKE_RC_COMPILE_OBJECT |
| 52 | + "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>") |
| 53 | + endif(MINGW) |
| 54 | + |
| 55 | + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/resource.template.rc ${CMAKE_CURRENT_SOURCE_DIR}/resource.rc |
| 56 | + @ONLY) |
| 57 | + list(APPEND _SOURCE_FILES "resource.rc") |
| 58 | +endif() |
| 59 | + |
| 60 | +# SDL2 dependency |
| 61 | +find_package(SDL2 REQUIRED CONFIG) |
| 62 | +set(_INCLUDE_DIRS ${SDL2_INCLUDE_DIRS}) |
| 63 | +set(_LIBS ${SDL2_LIBRARIES}) |
| 64 | + |
| 65 | +if (_UNAME STREQUAL "DARWIN") |
| 66 | + # MacOSX framework dependencies |
| 67 | + list(APPEND _LIBS "-framework CoreGraphics" "-framework Foundation") |
| 68 | +endif() |
| 69 | + |
| 70 | +if (_UNAME STREQUAL "LINUX") |
| 71 | + # X11 dependency |
| 72 | + find_package(X11 REQUIRED) |
| 73 | + list(APPEND _INCLUDE_DIRS ${X11_INCLUDE_DIR}) |
| 74 | + list(APPEND _LIBS ${X11_LIBRARIES}) |
| 75 | +endif() |
| 76 | + |
| 77 | +option(LWP_INSTALL_LAUNCHD "Launch lwp on login (MacOSX only)" OFF) |
| 78 | + |
| 79 | +# Config file |
| 80 | +set(_DEFAULT_CONFIG_FILE default.cfg) |
| 81 | +if(_UNAME STREQUAL "WIN32") |
| 82 | + set(_DEFAULT_CONFIG_FILE defaultWin.cfg) |
| 83 | +endif() |
| 84 | +if (_UNAME STREQUAL "DARWIN") |
| 85 | + set(_DEFAULT_CONFIG_FILE defaultMac.cfg) |
| 86 | +endif() |
| 87 | + |
| 88 | +# Main executable |
| 89 | +if (_UNAME STREQUAL "DARWIN") |
| 90 | + add_executable(lwp MACOSX_BUNDLE ${_SOURCE_FILES}) |
| 91 | +else() |
| 92 | + add_executable(lwp ${_SOURCE_FILES}) |
| 93 | +endif() |
| 94 | + |
| 95 | +# Windows specific properties for executable |
| 96 | +if(_UNAME STREQUAL "WIN32") |
| 97 | + set_property(TARGET lwp PROPERTY VS_DPI_AWARE "PerMonitor") |
| 98 | +endif() |
| 99 | + |
| 100 | +if(MSVC) |
| 101 | + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SUBSYSTEM:WINDOWS") |
| 102 | +endif() |
| 103 | + |
| 104 | +target_compile_definitions(lwp PUBLIC __${_UNAME}) |
| 105 | +target_include_directories(lwp PUBLIC ${_INCLUDE_DIRS}) |
| 106 | +target_link_libraries(lwp PRIVATE ${_LIBS}) |
| 107 | + |
| 108 | +# Installation rules |
| 109 | +if(_UNAME STREQUAL "WIN32") |
| 110 | + install(TARGETS lwp |
| 111 | + DESTINATION .) |
| 112 | + install(DIRECTORY wallpapers |
| 113 | + DESTINATION .) |
| 114 | + install(FILES LICENSE.txt |
| 115 | + DESTINATION .) |
| 116 | + install(FILES ${_DEFAULT_CONFIG_FILE} |
| 117 | + DESTINATION .) |
| 118 | + install(FILES ${SDL2_RUNTIME_DIR}/SDL2.dll |
| 119 | + DESTINATION .) |
| 120 | + install(FILES ${SDL2_RUNTIME_DIR}/README-SDL.txt |
| 121 | + DESTINATION .) |
| 122 | +elseif(_UNAME STREQUAL "LINUX") |
| 123 | + install(TARGETS lwp |
| 124 | + DESTINATION usr/local/bin) |
| 125 | + install(DIRECTORY wallpapers |
| 126 | + DESTINATION usr/local/share/lwp) |
| 127 | + install(FILES LICENSE.txt |
| 128 | + DESTINATION usr/local/share/lwp) |
| 129 | + install(FILES ${_DEFAULT_CONFIG_FILE} |
| 130 | + TYPE SYSCONF |
| 131 | + RENAME lwp.cfg) |
| 132 | +else() |
| 133 | + install(TARGETS lwp |
| 134 | + DESTINATION Layered_WallPaper) |
| 135 | + install(DIRECTORY wallpapers |
| 136 | + DESTINATION Layered_WallPaper) |
| 137 | + install(FILES LICENSE.txt |
| 138 | + DESTINATION Layered_WallPaper) |
| 139 | + install(FILES ${_DEFAULT_CONFIG_FILE} |
| 140 | + DESTINATION Layered_WallPaper |
| 141 | + RENAME lwp.cfg) |
| 142 | + install(FILES lwp.template.plist |
| 143 | + DESTINATION Layered_WallPaper) |
| 144 | + install (FILES setupPlist.command |
| 145 | + DESTINATION Layered_WallPaper |
| 146 | + RENAME Toggle_Autorun.command |
| 147 | + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) |
| 148 | + install (FILES setupPlist.command |
| 149 | + DESTINATION . |
| 150 | + RENAME Toggle_Autorun.command |
| 151 | + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) |
| 152 | + |
| 153 | +endif() |
| 154 | + |
| 155 | +# Installer |
| 156 | +if (_UNAME STREQUAL "WIN32") |
| 157 | + set(CPACK_GENERATOR NSIS) |
| 158 | + set(CPACK_PACKAGE_INSTALL_DIRECTORY "Layered WallPaper") |
| 159 | +elseif(_UNAME STREQUAL "LINUX") |
| 160 | + set(CPACK_GENERATOR TGZ) |
| 161 | + set(CPACK_INCLUDE_TOPLEVEL_DIRECTORY OFF) |
| 162 | +elseif(_UNAME STREQUAL "DARWIN") |
| 163 | + set(CPACK_GENERATOR DragNDrop) |
| 164 | + set(CPACK_DMG_BACKGROUND_IMAGE ${CMAKE_CURRENT_SOURCE_DIR}/dmgBg.png) |
| 165 | + set(CPACK_DMG_DS_STORE_SETUP_SCRIPT ${CMAKE_CURRENT_SOURCE_DIR}/setupDmg.applescript) |
| 166 | +endif() |
| 167 | +set(CPACK_NSIS_MUI_ICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.ico) |
| 168 | +set(CPACK_NSIS_MUI_UNIICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.ico) |
| 169 | +set(CPACK_NSIS_INSTALLED_ICON_NAME ${CMAKE_CURRENT_SOURCE_DIR}/icon.ico) |
| 170 | +set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS " |
| 171 | + WriteRegExpandStr HKLM 'Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run' 'lwp' '\$INSTDIR\\\\lwp.exe' |
| 172 | + Exec '\$INSTDIR\\\\lwp.exe' |
| 173 | + ") |
| 174 | +set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS " |
| 175 | + DeleteRegValue HKLM 'Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run' 'lwp' |
| 176 | + ") |
| 177 | +set(CPACK_PACKAGE_NAME "Layered WallPaper") |
| 178 | +set(CPACK_PACKAGE_VENDOR "Jakub Szczerbinski") |
| 179 | +set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt) |
| 180 | +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Multi-platform parallax wallpapers") |
| 181 | +set(CPACK_PACKAGE_VERSION ${PROGRAM_VERSION}) |
| 182 | + |
| 183 | +INCLUDE(CPack) |
0 commit comments