Skip to content

Commit 0f788f0

Browse files
committed
CPack Debian packaging, mk. 1
1 parent 99155ab commit 0f788f0

File tree

4 files changed

+105
-10
lines changed

4 files changed

+105
-10
lines changed

CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,6 @@ add_subdirectory(lib)
3737

3838
# core source directory, contains its own CMakeLists.txt
3939
add_subdirectory(src)
40+
41+
# packaging
42+
include(${PROJECT_SOURCE_DIR}/cmake/cpack-deb.cmake)

cmake/cpack-deb.cmake

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# required for DEB-DEFAULT to work as intended
2+
cmake_minimum_required(VERSION 3.6)
3+
4+
# TODO: modify dependency lists depending on settings like USE_SYSTEM_CURL
5+
# this file has been built for the default settings
6+
7+
set(PROJECT_VERSION 1.0)
8+
set(CPACK_GENERATOR "DEB")
9+
10+
set(CPACK_DEBIAN_PACKAGE_DEBUG ON)
11+
12+
# packaging only libappimageupdate for now
13+
#set(CPACK_COMPONENTS_ALL APPIMAGEUPDATE APPIMAGEUPDATETOOL LIBAPPIMAGEUPDATE LIBAPPIMAGEUPDATE-DEV LIBAPPIMAGEUPDATE-QT LIBAPPIMAGEUPDATE-QT-DEV)
14+
set(CPACK_COMPONENTS_ALL LIBAPPIMAGEUPDATE LIBAPPIMAGEUPDATE-DEV)
15+
16+
# global options
17+
set(CPACK_PACKAGE_CONTACT "TheAssassin")
18+
set(CPACK_PACKAGE_HOMEPAGE "https://github.com/AppImage/AppImageUpdate")
19+
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
20+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.txt")
21+
22+
# allow building Debian packages on non-Debian systems
23+
if(DEFINED ENV{ARCH})
24+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE $ENV{ARCH})
25+
if(CPACK_DEBIAN_PACKAGE_ARCHITECTURE MATCHES "i686")
26+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "i386")
27+
endif()
28+
endif()
29+
30+
# make sure to package components separately
31+
#set(CPACK_DEB_PACKAGE_COMPONENT ON)
32+
set(CPACK_DEB_COMPONENT_INSTALL ON)
33+
34+
# override default package naming
35+
set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
36+
37+
# Debian packaging global options
38+
set(CPACK_DEBIAN_COMPRESSION_TYPE xz)
39+
40+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE_PACKAGE_NAME "libappimageupdate")
41+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE_PACKAGE_VERSION "${APPIMAGEUPDATE_VERSION}")
42+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE_PACKAGE_RELEASE "git${APPIMAGEUPDATE_GIT_COMMIT}")
43+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE_PACKAGE_DEPENDS "libcurl3, libstdc++6, libgcc1, libc6")
44+
45+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE-DEV_PACKAGE_NAME "libappimageupdate-dev")
46+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE-DEV_PACKAGE_VERSION "${APPIMAGEUPDATE_VERSION}")
47+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE-DEV_PACKAGE_RELEASE "git${APPIMAGEUPDATE_GIT_COMMIT}")
48+
set(CPACK_DEBIAN_LIBAPPIMAGEUPDATE-DEV_PACKAGE_DEPENDS "libappimageupdate, libcurl3-gnutls-dev, libstdc++-5-dev")
49+
50+
# improve dependency list
51+
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
52+
53+
# TODO: insert some useful description
54+
set(CPACK_COMPONENT_APPIMAGELAUNCHER_PACKAGE_DESCRIPTION "AppImageLauncher")
55+
56+
# find more suitable section for package
57+
set(CPACK_COMPONENT_APPIMAGELAUNCHER_PACKAGE_SECTION misc)
58+
59+
# add postinst and prerm hooks to Debian package
60+
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA
61+
"${PROJECT_SOURCE_DIR}/cmake/debian/postinst;${PROJECT_SOURCE_DIR}/cmake/debian/prerm")
62+
63+
# must be the last instruction
64+
include(CPack)

src/CMakeLists.txt

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ add_subdirectory(elf)
3030
# core library
3131
add_library(
3232
libappimageupdate
33+
SHARED
3334
${PROJECT_SOURCE_DIR}/include/appimage/update.h updater.cpp
3435
util.h
3536
)
@@ -50,23 +51,50 @@ target_include_directories(libappimageupdate PUBLIC
5051
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib/zsync2/include>
5152
)
5253

54+
55+
# core library
56+
add_library(
57+
libappimageupdate_static
58+
STATIC
59+
${PROJECT_SOURCE_DIR}/include/appimage/update.h updater.cpp
60+
util.h
61+
)
62+
# since the target is called libsomething, one doesn't need CMake's additional lib prefix
63+
set_target_properties(libappimageupdate_static
64+
PROPERTIES
65+
PREFIX ""
66+
OUTPUT_NAME "libappimageupdate"
67+
PUBLIC_HEADER ${PROJECT_SOURCE_DIR}/include/appimage/update.h
68+
)
69+
# link thread libraries
70+
target_link_libraries(libappimageupdate_static PUBLIC elf PRIVATE ${CMAKE_THREAD_LIBS_INIT} libzsync2 ${CPR_LIBRARIES})
71+
# include directories, publicly
72+
target_include_directories(libappimageupdate_static PUBLIC
73+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
74+
$<INSTALL_INTERFACE:include>
75+
# FIXME: works for now, but should be possible without these workaround
76+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib/zsync2/lib/cpr/include>
77+
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/lib/zsync2/include>
78+
)
79+
80+
5381
# CLI application
5482
add_executable(appimageupdatetool main.cpp)
5583
# link to core lib
5684
target_link_libraries(appimageupdatetool libappimageupdate args)
5785

5886
# install targets
5987
install(
60-
TARGETS libappimageupdate appimageupdatetool
61-
RUNTIME DESTINATION bin
62-
LIBRARY DESTINATION lib
63-
ARCHIVE DESTINATION lib/static
64-
PUBLIC_HEADER DESTINATION include/appimage
88+
TARGETS libappimageupdate libappimageupdate_static appimageupdatetool
89+
RUNTIME DESTINATION bin COMPONENT APPIMAGEUPDATETOOL
90+
LIBRARY DESTINATION lib COMPONENT LIBAPPIMAGEUPDATE
91+
ARCHIVE DESTINATION lib COMPONENT LIBAPPIMAGEUPDATE
92+
PUBLIC_HEADER DESTINATION include/appimage COMPONENT LIBAPPIMAGEUPDATE-DEV
6593
)
6694

6795

6896
# include Qt UI
6997
set(BUILD_QT_UI BOOL CACHE "Build Qt UI (widget library and demo application)" OFF)
70-
if (BUILD_QT_UI)
98+
if(BUILD_QT_UI)
7199
add_subdirectory(qt-ui)
72100
endif()

src/qt-ui/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ target_compile_definitions(AppImageUpdate PRIVATE -DQT_UI)
3131
# install targets
3232
install(
3333
TARGETS libappimageupdate-qt AppImageUpdate
34-
RUNTIME DESTINATION bin
35-
LIBRARY DESTINATION lib
36-
ARCHIVE DESTINATION lib/static
37-
PUBLIC_HEADER DESTINATION include/appimage/update
34+
RUNTIME DESTINATION bin COMPONENT APPIMAGEUPDATE
35+
LIBRARY DESTINATION lib COMPONENT LIBAPPIMAGEUPDATE-QT
36+
ARCHIVE DESTINATION lib COMPONENT LIBAPPIMAGEUPDATE-QT
37+
PUBLIC_HEADER DESTINATION include/appimage/update COMPONENT LIBAPPIMAGEUPDATE-QT-DEV
3838
)

0 commit comments

Comments
 (0)