From acade5c35b4c017d7ff92b093b888a9a4a0f7c9e Mon Sep 17 00:00:00 2001 From: Gary Wang Date: Tue, 28 Apr 2026 16:43:43 +0800 Subject: [PATCH] cpack deb --- .gitignore | 10 ++++++++ CMakeLists.txt | 30 +++++++++++++++++++++++ data/icons/128x128/apps/localsend-qt.png | Bin 0 -> 1042 bytes data/icons/256x256/apps/localsend-qt.png | Bin 0 -> 2098 bytes data/icons/512x512/apps/localsend-qt.png | Bin 0 -> 4688 bytes data/org.localsend.localsend-qt.desktop | 12 +++++++++ src/app/CMakeLists.txt | 5 ++++ src/core/CMakeLists.txt | 10 ++++++++ 8 files changed, 67 insertions(+) create mode 100644 .gitignore create mode 100644 data/icons/128x128/apps/localsend-qt.png create mode 100644 data/icons/256x256/apps/localsend-qt.png create mode 100644 data/icons/512x512/apps/localsend-qt.png create mode 100644 data/org.localsend.localsend-qt.desktop diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0cb4876 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +build/ +*.user +*.autosave +*.qmlc +*.jsc +CMakeLists.txt.user +cmake-build-*/ +.idea/ +.vscode/ +.cache/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 820216e..c7a1cea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,8 @@ if(WITH_HTTP_SERVER) find_package(Qt6 6.8 COMPONENTS HttpServer) endif() +include(GNUInstallDirs) + add_subdirectory(src/core) add_subdirectory(src/app) @@ -30,3 +32,31 @@ if(BUILD_TESTS) find_package(Qt6 REQUIRED COMPONENTS Test) add_subdirectory(tests) endif() + +install(DIRECTORY data/icons/ + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor +) + +install(FILES data/org.localsend.localsend-qt.desktop + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications +) + +set(CPACK_PACKAGE_NAME "localsend-qt") +set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Share files between devices on the local network") +set(CPACK_PACKAGE_DESCRIPTION "LocalSend Qt is a native Qt6 client for the LocalSend protocol, \ +allowing fast and secure file sharing between devices on the same local network.") +set(CPACK_PACKAGE_HOMEPAGE_URL "https://localsend.org") +set(CPACK_PACKAGE_CONTACT "LocalSend Qt Developers") +set(CPACK_PACKAGE_LICENSE "MIT") +set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}_${PROJECT_VERSION}_${CMAKE_SYSTEM_PROCESSOR}") + +set(CPACK_GENERATOR "DEB") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt6core6 (>= 6.8), libqt6network6 (>= 6.8), libqt6quick6 (>= 6.8), libqt6quickcontrols2-6 (>= 6.8), libqt6httpserver6 (>= 6.8), libc6") +set(CPACK_DEBIAN_PACKAGE_SECTION "net") +set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") +set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) +set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "${CPACK_PACKAGE_DESCRIPTION}") +set(CPACK_DEBIAN_COMPRESSION_TYPE "zstd") + +include(CPack) diff --git a/data/icons/128x128/apps/localsend-qt.png b/data/icons/128x128/apps/localsend-qt.png new file mode 100644 index 0000000000000000000000000000000000000000..9affd87e13cdeedbd523497c427267adb15d1a37 GIT binary patch literal 1042 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 L)=u!(mMG#sHY(}U literal 0 HcmV?d00001 diff --git a/data/icons/512x512/apps/localsend-qt.png b/data/icons/512x512/apps/localsend-qt.png new file mode 100644 index 0000000000000000000000000000000000000000..3e20f217afd5a937edf5d07287c0b6557a7396ed GIT binary patch literal 4688 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 literal 0 HcmV?d00001 diff --git a/data/org.localsend.localsend-qt.desktop b/data/org.localsend.localsend-qt.desktop new file mode 100644 index 0000000..f3f4597 --- /dev/null +++ b/data/org.localsend.localsend-qt.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Type=Application +Name=LocalSend Qt +GenericName=File Transfer +Comment=Share files between devices on the local network +Exec=localsend-qt +Icon=localsend-qt +Terminal=false +Categories=Network;FileTransfer;Qt; +Keywords=transfer;share;files;local;network; +StartupNotify=true +StartupWMClass=LocalSend diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index c192125..c6c6e54 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -4,6 +4,10 @@ qt_add_executable(LocalSendQt AppController.cpp ) +set_target_properties(LocalSendQt PROPERTIES + OUTPUT_NAME localsend-qt +) + qt_add_qml_module(LocalSendQt URI LocalSend VERSION 1.0 @@ -18,6 +22,7 @@ target_link_libraries(LocalSendQt PRIVATE ) install(TARGETS LocalSendQt + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} BUNDLE DESTINATION . LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 9672488..c18a75d 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -53,3 +53,13 @@ set_target_properties(LocalSendCore PROPERTIES SOVERSION 1 OUTPUT_NAME localsend-core ) + +install(TARGETS LocalSendCore + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +) + +if(INSTALL_DEVEL_HEADERS) + install(DIRECTORY include/LocalSendCore + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) +endif()