レポジトリ種類: SVN

cmake_minimum_required(VERSION 3.15)

project(SimPas VERSION 1.2.0 LANGUAGES CXX)

set(OS "unknown")
set(FAMILY "unknown")
set(ARCH "unknown")

if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
  set(FAMILY "linux")
  set(OS "linux")
elseif (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
  set(FAMILY "bsd")
  set(OS "openbsd")
elseif (CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
  set(FAMILY "bsd")
  set(OS "freebsd")
elseif (CMAKE_SYSTEM_NAME STREQUAL "NetBSD")
  set(FAMILY "bsd")
  set(OS "netbsd")
elseif (CMAKE_SYSTEM_NAME STREQUAL "DragonFly")
  set(FAMILY "bsd")
  set(OS "dragonfly")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Windows")
  set(FAMILY "windows")
  set(OS "windows")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Haiku")
  set(FAMILY "beos")
  set(OS "haiku")
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
  set(FAMILY "darwin")
  set(OS "macos")
endif()

if (CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
  set(ARCH "amd64")
elseif (CMAKE_SYSTEM_PROCESSOR STREQUAL "macppc")
  set(ARCH "powerpc")
endif()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(FLTK_USE_STATIC ON)
find_package(FLTK REQUIRED)

# set(GPGME_USE_STATIC ON)
# find_package(GPGME REQUIRED)
# set(GPGMEPP_USE_STATIC ON)
# find_package(GPGMEPP REQUIRED)

set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wno-non-c-typedef-for-linkage\
    -Wno-unused-parameter -Wno-cast-function-type")

if (FAMILY STREQUAL "linux")
  include_directories(/usr/include)
  link_directories(/usr/lib)
elseif (FAMILY STREQUAL "haiku")
  include_directories(/boot/system/develop/headers)
  link_directories(/boot/system/develop/lib)
elseif (OS STREQUAL "netbsd")
  include_directories(/usr/local/include /usr/X11R7/include /usr/pkg/include)
  link_directories(/usr/local/lib /usr/X11R7/lib /usr/pkg/lib)
elseif (OS STREQUAL "openbsd")
  include_directories(/usr/local/include /usr/X11R6/include)
  link_directories(/usr/local/lib /usr/X11R6/lib)
elseif (OS STREQUAL "freebsd")
  include_directories(/usr/local/include)
  link_directories(/usr/local/lib)
elseif (FAMILY STREQUAL "windows")
  include_directories(external/include)
  link_directories(external/lib)
endif()

if (FAMILY STREQUAL "linux" OR FAMILY STREQUAL "bsd" OR FAMILY STREQUAL "windows")
  set(CMAKE_EXE_LINKER_FLAGS "-static")
endif()

file(GLOB_RECURSE SOURCES "main.cc" "src/*.cc")

add_executable(${PROJECT_NAME} ${SOURCES})
set(STDLIB fltk_images fltk X11 assuan gpgmepp gpgme crypto gpg-error)

if (OS STREQUAL "haiku")
  target_link_libraries(${PROJECT_NAME} network ${STDLIB})
elseif (OS STREQUAL "macos")
  target_link_libraries(${PROJECT_NAME} ${STDLIB})
elseif (OS STREQUAL "haiku")
  target_link_libraries(${PROJECT_NAME} ${STDLIB})
elseif (OS STREQUAL "linux")
  target_link_libraries(${PROJECT_NAME} ${STDLIB} stdc++ gcc c Xft Xext Xrender
    fontconfig Xinerama xcb freetype png16 z expat Xau Xdmcp bz2 brotlidec
    brotlicommon assuan)
elseif (OS STREQUAL "openbsd")
  target_link_libraries(${PROJECT_NAME} ${STDLIB} c++abi pthread m c Xcursor Xfixes
    Xext Xft fontconfig Xinerama Xdmcp Xau z xcb Xrender expat freetype c++ intl
    iconv png jpeg)
elseif (OS STREQUAL "freebsd")
  target_link_libraries(${PROJECT_NAME} ${STDLIB} stdc++ lcxxrt m Xrender Xcursor
    Xfixes Xext Xft fontconfig Xinerama thr z xcb freetype expat Xau Xdmcp bz2
    brotlidec brotlicommon c++ gcc c gpgme assuan intl png16)
elseif (OS STREQUAL "netbsd")
  target_link_libraries(${PROJECT_NAME} ${STDLIB} stdc++ pthread m c Xft xcb fontconfig
    freetype Xau Xdmcp Xcursor Xrandr Xext Xrender Xfixes Xinerama X11 expat png16
    jpeg crypt z bz2 gcc assuan intl)
elseif (FAMILY STREQUAL "windows")
  target_link_libraries(${PROJECT_NAME} fltk_images fltk gpgmepp crypto gpg-error)
endif()

install(TARGETS ${PROJECT_NAME}
  RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
)
install(FILES ${PROJECT_NAME}.desktop DESTINATION
              ${CMAKE_INSTALL_PREFIX}/share/applications)
install(DIRECTORY icons/ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons)

if (CMAKE_BUILD_TYPE STREQUAL "Release")
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
  add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${PROJECT_NAME}>
  )
endif()

include(CPack)

set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_PACKAGE_CONTACT "Suwako Moriya <suwako@076.moe>")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple Password Manager")
set(CPACK_PACKAGE_VENDOR "076")
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-${OS}-${ARCH}")
set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CPackConfig.cmake")

if (OS STREQUAL "macos")
  set(CPACK_GENERATOR "DragNDrop")
  set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME}")
endif()

if (OS STREQUAL "Linux")
  set(CPACK_GENERATOR "External")
  set(CPACK_EXTERNAL_COMMAND "appimagetool")
  set(CPACK_EXTERNAL_ARGUMENTS
    "${CMAKE_BINARY_DIR}/AppDir"
    "${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.AppImage"
  )
  install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/AppDir/usr/bin)")
  install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E copy \$<TARGET_FILE:${PROJECT_NAME}> ${CMAKE_BINARY_DIR}/AppDir/usr/bin)")
endif()

if (OS STREQUAL "haiku")
  set(CPACK_GENERATOR "HaikuPackage")
  set(CPACK_HAIKU_PACKAGE_NAME "${PROJECT_NAME}")
  set(CPACK_HAIKU_PACKAGE_SUMMARY "Simple Password Manager")
  set(CPACK_HAIKU_PACKAGE_DESCRIPTION "Simple Password Manager for ${OS}.")
  set(CPACK_HAIKU_PACKAGE_ARCHITECTURE "${ARCH}")
  set(CPACK_HAIKU_PACKAGE_VERSION "${PROJECT_VERSION}")
endif()

cpack_add_install_type(Full)
cpack_add_component(${PROJECT_NAME} DISPLAY_NAME "Application")