From a162dec76fec6b8d38b27a62bfce5a04c3e884c4 Mon Sep 17 00:00:00 2001 From: Davide Beatrici Date: Thu, 9 Aug 2018 23:33:38 +0200 Subject: [PATCH] CMake: add support for Debian packaging with CPack --- CMakeLists.txt | 26 ++++++++++++++++++++++++-- src/CMakeLists.txt | 40 +++++++++++++++++++++++++++++++++------- 2 files changed, 57 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 540aba12..fe05c2d2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,9 @@ -cmake_minimum_required(VERSION 3.4.3) +cmake_minimum_required(VERSION 3.6) -project(SoftEtherVPN LANGUAGES C) +project(SoftEtherVPN + VERSION 5.01.9657 + LANGUAGES C +) set(default_build_type "Release") @@ -10,3 +13,22 @@ if(EXISTS "${SoftEtherVPN_SOURCE_DIR}/.git" AND NOT EXISTS "${SoftEtherVPN_SOURC endif() add_subdirectory(src) + +# Packaging +set(CPACK_GENERATOR "DEB") +set(CPACK_COMPONENTS_ALL vpnserver vpnclient vpnbridge vpncmd) +set(CPACK_PACKAGE_DIRECTORY ${SoftEtherVPN_SOURCE_DIR}/bin) +set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +set(CPACK_PACKAGE_VENDOR "SoftEther") +set(CPACK_PACKAGE_NAME "softether") +set(CPACK_PACKAGE_DESCRIPTION_FILE "${SoftEtherVPN_SOURCE_DIR}/description") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "SoftEther VPN is an open-source cross-platform multi-protocol VPN program, created as an academic project in the University of Tsukuba.") + +# DEB +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) +set(CPACK_DEBIAN_FILE_NAME "DEB-DEFAULT") +set(CPACK_DEBIAN_PACKAGE_SECTION "net") +set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Unknown") + +include(CPack) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 449256d0..c89109c9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,6 +1,6 @@ include(GNUInstallDirs) -macro(install_wrapper_script target destination) +macro(install_wrapper_script component target destination) get_filename_component(filename ${target} NAME) file(WRITE ${CMAKE_SOURCE_DIR}/tmp/script/${filename} "#!/bin/sh\n") @@ -8,6 +8,7 @@ macro(install_wrapper_script target destination) file(APPEND ${CMAKE_SOURCE_DIR}/tmp/script/${filename} "exit $?\n") install(FILES ${CMAKE_SOURCE_DIR}/tmp/script/${filename} + COMPONENT ${component} DESTINATION ${destination} PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE ) @@ -124,8 +125,33 @@ add_custom_command(TARGET hamcore-archive-build COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/tmp/hamcore.se2 ${VPNCMD_RUNTIME_OUTPUT_DIRECTORY} ) -# Copy contents of "bin" directory to /usr/lib(exec)/softether/ -install(DIRECTORY "${CMAKE_SOURCE_DIR}/bin/" +# Copy "vpnserver" directory to /usr/lib(exec)/softether/ +install(DIRECTORY ${VPNSERVER_RUNTIME_OUTPUT_DIRECTORY} + COMPONENT "vpnserver" + DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/softether" + PATTERN "*" + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE +) + +# Copy "vpnclient" directory to /usr/lib(exec)/softether/ +install(DIRECTORY ${VPNCLIENT_RUNTIME_OUTPUT_DIRECTORY} + COMPONENT "vpnclient" + DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/softether" + PATTERN "*" + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE +) + +# Copy "vpnbridge" directory to /usr/lib(exec)/softether/ +install(DIRECTORY ${VPNBRIDGE_RUNTIME_OUTPUT_DIRECTORY} + COMPONENT "vpnbridge" + DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/softether" + PATTERN "*" + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE +) + +# Copy "vpncmd" directory to /usr/lib(exec)/softether/ +install(DIRECTORY ${VPNCMD_RUNTIME_OUTPUT_DIRECTORY} + COMPONENT "vpncmd" DESTINATION "${CMAKE_INSTALL_LIBEXECDIR}/softether" PATTERN "*" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE @@ -133,10 +159,10 @@ install(DIRECTORY "${CMAKE_SOURCE_DIR}/bin/" # Create wrapper scripts in the user's binaries directory, which is usually "/usr/local/bin". # This is required because symlinks use the folder they are in as working directory. -install_wrapper_script("${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpnserver/vpnserver" ${CMAKE_INSTALL_FULL_BINDIR}) -install_wrapper_script("${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpnclient/vpnclient" ${CMAKE_INSTALL_FULL_BINDIR}) -install_wrapper_script("${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpnbridge/vpnbridge" ${CMAKE_INSTALL_FULL_BINDIR}) -install_wrapper_script("${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpncmd/vpncmd" ${CMAKE_INSTALL_FULL_BINDIR}) +install_wrapper_script("vpnserver" "${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpnserver/vpnserver" ${CMAKE_INSTALL_FULL_BINDIR}) +install_wrapper_script("vpnclient" "${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpnclient/vpnclient" ${CMAKE_INSTALL_FULL_BINDIR}) +install_wrapper_script("vpnbridge" "${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpnbridge/vpnbridge" ${CMAKE_INSTALL_FULL_BINDIR}) +install_wrapper_script("vpncmd" "${CMAKE_INSTALL_FULL_LIBEXECDIR}/softether/vpncmd/vpncmd" ${CMAKE_INSTALL_FULL_BINDIR}) # Print message after installing the targets install(CODE "message(\"\n----------------------------------------------------------------------------------------------------------------------------\")")