lol
1diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake
2index ea133a3..916606c 100644
3--- a/cmake/dependencies.cmake
4+++ b/cmake/dependencies.cmake
5@@ -224,21 +224,23 @@ if(NOT USE_SYSTEM_XZ)
6 LIBRARY_DIRS <INSTALL_DIR>/lib/
7 LIBRARIES "<INSTALL_DIR>/lib/liblzma.a"
8 INCLUDE_DIRS "<SOURCE_DIR>/src/liblzma/api/"
9 )
10 else()
11 message(STATUS "Using system xz")
12
13 import_pkgconfig_target(TARGET_NAME xz PKGCONFIG_TARGET liblzma STATIC)
14 endif()
15
16+set(USE_SYSTEM_SQUASHFUSE OFF CACHE BOOL "Use system squashfuse instead of building our own")
17
18+if(NOT USE_SYSTEM_SQUASHFUSE)
19 # as distros don't provide suitable squashfuse and squashfs-tools, those dependencies are bundled in, can, and should
20 # be used from this repository
21 # TODO: implement out-of-source builds for squashfuse, as for the other dependencies
22 configure_file(
23 ${CMAKE_CURRENT_SOURCE_DIR}/src/patch-squashfuse.sh.in
24 ${CMAKE_CURRENT_BINARY_DIR}/patch-squashfuse.sh
25 @ONLY
26 )
27
28 ExternalProject_Add(squashfuse-EXTERNAL
29@@ -259,20 +261,34 @@ ExternalProject_Add(squashfuse-EXTERNAL
30 BUILD_IN_SOURCE ON
31 INSTALL_COMMAND ${MAKE} install
32 )
33
34 import_external_project(
35 TARGET_NAME squashfuse
36 EXT_PROJECT_NAME squashfuse-EXTERNAL
37 LIBRARIES "<SOURCE_DIR>/.libs/libsquashfuse.a;<SOURCE_DIR>/.libs/libsquashfuse_ll.a;<SOURCE_DIR>/.libs/libfuseprivate.a"
38 INCLUDE_DIRS "<SOURCE_DIR>"
39 )
40+else()
41+ message(STATUS "Using system squashfsfuse from ${SQUASHFUSE}")
42+
43+ add_library(squashfuse INTERFACE IMPORTED GLOBAL)
44+
45+ set(squashfuse_INCLUDE_DIRS "${SQUASHFUSE}/include")
46+ set(squashfuse_LIBRARIES "${SQUASHFUSE}/lib/libsquashfuse.a;${SQUASHFUSE}/lib/libsquashfuse_ll.a;${SQUASHFUSE}/lib/libfuseprivate.a")
47+
48+ set_property(
49+ TARGET squashfuse
50+ PROPERTY INTERFACE_LINK_LIBRARIES ${squashfuse_LIBRARIES}
51+ )
52+ include_directories(${squashfuse_INCLUDE_DIRS})
53+endif()
54
55
56 set(USE_SYSTEM_INOTIFY_TOOLS OFF CACHE BOOL "Use system libinotifytools instead of building our own")
57
58 if(NOT USE_SYSTEM_INOTIFY_TOOLS)
59 message(STATUS "Downloading and building inotify-tools")
60
61 # TODO: build out of source
62 ExternalProject_Add(inotify-tools-EXTERNAL
63 URL https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
64@@ -345,20 +361,23 @@ if(NOT USE_SYSTEM_GTEST)
65 INCLUDE_DIRS "<INSTALL_DIR>/include/"
66 )
67 else()
68 message(STATUS "Using system GTest")
69
70 import_find_pkg_target(gtest GTest GTEST)
71 endif()
72 endif()
73
74
75+set(USE_SYSTEM_MKSQUASHFS OFF CACHE BOOL "Use system mksquashfs instead of downloading and building our own")
76+
77+if(NOT USE_SYSTEM_MKSQUASHFS)
78 # TODO: allow using system wide mksquashfs
79 set(mksquashfs_cflags "-DXZ_SUPPORT ${CFLAGS}")
80
81 if(xz_LIBRARIES MATCHES "\\.a$")
82 set(mksquashfs_ldflags "${xz_LIBRARIES}")
83 else()
84 set(mksquashfs_ldflags "-l${xz_LIBRARIES}")
85 endif()
86
87 if(xz_INCLUDE_DIRS)
88@@ -385,20 +404,25 @@ ExternalProject_Add(mksquashfs
89 INSTALL_COMMAND ${MAKE} -C squashfs-tools/ install INSTALL_DIR=<INSTALL_DIR>
90 )
91
92 ExternalProject_Get_Property(mksquashfs INSTALL_DIR)
93 set(mksquashfs_INSTALL_DIR "${INSTALL_DIR}")
94 mark_as_advanced(mksquashfs_INSTALL_DIR)
95
96 # for later use when packaging as an AppImage
97 set(mksquashfs_BINARY "${mksquashfs_INSTALL_DIR}/mksquashfs")
98 mark_as_advanced(mksquashfs_BINARY)
99+else()
100+ message(STATUS "Using system mksquashfs")
101+
102+ set(mksquashfs_BINARY "mksquashfs")
103+endif()
104
105
106 #### build dependency configuration ####
107
108 # only have to build custom xz when not using system libxz
109 if(TARGET xz-EXTERNAL)
110 if(TARGET squashfuse-EXTERNAL)
111 ExternalProject_Add_StepDependencies(squashfuse-EXTERNAL configure xz-EXTERNAL)
112 endif()
113 if(TARGET mksquashfs)
114diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
115index 3f25442..974ed0e 100644
116--- a/src/CMakeLists.txt
117+++ b/src/CMakeLists.txt
118@@ -197,27 +197,27 @@ target_include_directories(digest_md5
119
120 target_link_libraries(digest_md5
121 PRIVATE
122 libglib
123 )
124
125
126 # install binaries
127 if(AUXILIARY_FILES_DESTINATION)
128 install(
129- PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
130+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/runtime
131 DESTINATION ${AUXILIARY_FILES_DESTINATION}
132 COMPONENT applications
133 )
134 else()
135 install(
136- PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
137+ PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/runtime
138 DESTINATION bin
139 COMPONENT applications
140 )
141 endif()
142
143 install(
144 TARGETS AppRun appimagetool digest validate
145 RUNTIME DESTINATION bin COMPONENT applications
146 LIBRARY DESTINATION lib COMPONENT applications
147 ARCHIVE DESTINATION lib/static COMPONENT applications
148diff --git a/src/shared.c b/src/shared.c
149index cf5fd5c..4f48dbc 100644
150--- a/src/shared.c
151+++ b/src/shared.c
152@@ -34,21 +34,21 @@
153 #include <sys/stat.h>
154 #include <sys/types.h>
155 #include <dirent.h>
156 #include <errno.h>
157
158 #include <glib.h>
159 #include <glib/gprintf.h>
160 #include <glib/gstdio.h>
161 #include <gio/gio.h>
162
163-#include "squashfuse.h"
164+#include <squashfuse.h>
165 #include <squashfs_fs.h>
166 #include "getsection.h"
167 #include "elf.h"
168
169 #include "xdg-basedir.h"
170
171 // own header
172 #include "shared.h"
173
174 #if HAVE_LIBARCHIVE3 == 1 // CentOS