From b0053e6140354bb5798d53a702bc46873dfe6956 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Thu, 29 Dec 2022 00:15:00 +0100 Subject: [PATCH 1/4] Require an external liblzma xz is a standard part of Linux distros; hence, make it a required dependency, without using an external copy of it. --- README.md | 2 +- cmake/dependencies.cmake | 35 +---------------------------------- 2 files changed, 2 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index cef8104b..e6ea10b3 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ https://docs.appimage.org/api/libappimage/. Please note that if you are using li If for some reason you need to do a local development build, on a deb-based system (tested on Ubuntu xenial) do: ``` -sudo apt-get -y install automake cmake libtool libcairo-dev libfuse-dev git librsvg2-dev +sudo apt-get -y install automake cmake libtool libcairo-dev libfuse-dev git librsvg2-dev liblzma-dev git clone https://github.com/AppImage/libappimage --recursive cd ./libappimage/ mkdir build diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 459f2363..5632eeb3 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -34,34 +34,8 @@ set(CPPFLAGS ${DEPENDENCIES_CPPFLAGS}) set(LDFLAGS ${DEPENDENCIES_LDFLAGS}) -set(USE_SYSTEM_XZ OFF CACHE BOOL "Use system xz/liblzma instead of building our own") - if (NOT LIBAPPIMAGE_SHARED_ONLY) - if(NOT USE_SYSTEM_XZ) - message(STATUS "Downloading and building xz") - - ExternalProject_Add( - xz-EXTERNAL - URL https://netcologne.dl.sourceforge.net/project/lzmautils/xz-5.2.5.tar.gz - URL_HASH SHA512=7443674247deda2935220fbc4dfc7665e5bb5a260be8ad858c8bd7d7b9f0f868f04ea45e62eb17c0a5e6a2de7c7500ad2d201e2d668c48ca29bd9eea5a73a3ce - CONFIGURE_COMMAND CC=${CC} CXX=${CXX} CFLAGS=${CFLAGS} CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} /configure --with-pic --disable-shared --enable-static --prefix= --libdir=/lib ${EXTRA_CONFIGURE_FLAGS} --disable-xz --disable-xzdec - BUILD_COMMAND ${MAKE} - INSTALL_COMMAND ${MAKE} install - UPDATE_DISCONNECTED On - ) - - import_external_project( - TARGET_NAME xz - EXT_PROJECT_NAME xz-EXTERNAL - LIBRARY_DIRS /lib/ - LIBRARIES "/lib/liblzma.a" - INCLUDE_DIRS "/src/liblzma/api/" - ) - else() - message(STATUS "Using system xz") - - import_pkgconfig_target(TARGET_NAME xz PKGCONFIG_TARGET liblzma) - endif() + import_pkgconfig_target(TARGET_NAME xz PKGCONFIG_TARGET liblzma) # as distros don't provide suitable squashfuse and squashfs-tools, those dependencies are bundled in, can, and should @@ -146,13 +120,6 @@ if (NOT LIBAPPIMAGE_SHARED_ONLY) #### build dependency configuration #### - # only have to build custom xz when not using system libxz - if(TARGET xz-EXTERNAL) - if(TARGET squashfuse-EXTERNAL) - ExternalProject_Add_StepDependencies(squashfuse-EXTERNAL configure xz-EXTERNAL) - endif() - endif() - # we need Boost.Algorithm, which does not need to be included explicitly since it's header-only # link to Boost::boost to include the header directories find_package(Boost 1.53.0 REQUIRED) From 1ee78bb886651d64de38e51636579acbc76c9698 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Thu, 29 Dec 2022 00:20:27 +0100 Subject: [PATCH 2/4] Require an external libarchive libarchive is a standard part of Linux distros; hence, make it a required dependency, without using an external copy of it. --- README.md | 2 +- cmake/dependencies.cmake | 27 +-------------------------- 2 files changed, 2 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index e6ea10b3..bef7bcb3 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ https://docs.appimage.org/api/libappimage/. Please note that if you are using li If for some reason you need to do a local development build, on a deb-based system (tested on Ubuntu xenial) do: ``` -sudo apt-get -y install automake cmake libtool libcairo-dev libfuse-dev git librsvg2-dev liblzma-dev +sudo apt-get -y install automake cmake libtool libcairo-dev libfuse-dev git librsvg2-dev liblzma-dev libarchive-dev git clone https://github.com/AppImage/libappimage --recursive cd ./libappimage/ mkdir build diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 5632eeb3..56933d7a 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -90,32 +90,7 @@ if (NOT LIBAPPIMAGE_SHARED_ONLY) endif() - set(USE_SYSTEM_LIBARCHIVE OFF CACHE BOOL "Use system libarchive instead of building our own") - - if(NOT USE_SYSTEM_LIBARCHIVE) - message(STATUS "Downloading and building libarchive") - - ExternalProject_Add( - libarchive-EXTERNAL - URL https://www.libarchive.org/downloads/libarchive-3.3.1.tar.gz - URL_HASH SHA512=90702b393b6f0943f42438e277b257af45eee4fa82420431f6a4f5f48bb846f2a72c8ff084dc3ee9c87bdf8b57f4d8dddf7814870fe2604fe86c55d8d744c164 - CONFIGURE_COMMAND CC=${CC} CXX=${CXX} CFLAGS=${CFLAGS} CPPFLAGS=${CPPFLAGS} LDFLAGS=${LDFLAGS} /configure --with-pic --disable-shared --enable-static --disable-bsdtar --disable-bsdcat --disable-bsdcpio --with-zlib --without-bz2lib --without-iconv --without-lz4 --without-lzma --without-lzo2 --without-nettle --without-openssl --without-xml2 --without-expat --prefix= --libdir=/lib ${EXTRA_CONFIGURE_FLAGS} - BUILD_COMMAND ${MAKE} - INSTALL_COMMAND ${MAKE} install - UPDATE_DISCONNECTED On - ) - - import_external_project( - TARGET_NAME libarchive - EXT_PROJECT_NAME libarchive-EXTERNAL - LIBRARIES "/lib/libarchive.a" - INCLUDE_DIRS "/include/" - ) - else() - message(STATUS "Using system libarchive") - - import_find_pkg_target(libarchive LibArchive LibArchive) - endif() + import_find_pkg_target(libarchive LibArchive LibArchive) #### build dependency configuration #### From e43f70a34e469128f7d392e836800974bfa9cb86 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Thu, 29 Dec 2022 00:24:05 +0100 Subject: [PATCH 3/4] Require some tools only when needed Search and require the tools needed for the custom build of squashfuse only in case we need to do the custom build of it, and not in all the cases (i.e. when using a system version). This avoids extra build time requirements when using a system version of squashfuse. --- cmake/dependencies.cmake | 9 +++++++++ cmake/tools.cmake | 10 ---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index 56933d7a..bb495814 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -56,6 +56,15 @@ if (NOT LIBAPPIMAGE_SHARED_ONLY) @ONLY ) + check_program(NAME aclocal) + check_program(NAME autoheader) + check_program(NAME automake) + check_program(NAME autoreconf) + check_program(NAME libtoolize) + check_program(NAME patch) + check_program(NAME sed) + check_program(NAME make) + ExternalProject_Add( squashfuse-EXTERNAL GIT_REPOSITORY https://github.com/vasi/squashfuse/ diff --git a/cmake/tools.cmake b/cmake/tools.cmake index 2b2cade7..32ea75f7 100644 --- a/cmake/tools.cmake +++ b/cmake/tools.cmake @@ -43,16 +43,6 @@ function(check_program) mark_as_advanced(${name_upper}) endfunction() -if (NOT LIBAPPIMAGE_SHARED_ONLY) - check_program(NAME aclocal) - check_program(NAME autoheader) - check_program(NAME automake) - check_program(NAME autoreconf) - check_program(NAME libtoolize) - check_program(NAME patch) - check_program(NAME sed) - check_program(NAME make) -endif() if(BUILD_TESTING) check_program(NAME desktop-file-validate) endif() From 60f6ad259567a4db854521801b7553acd1ba56c3 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Thu, 29 Dec 2022 00:29:05 +0100 Subject: [PATCH 4/4] Add a cache variable USE_SYSTEM_XDGUTILS Mimics what is done for other dependencies. --- cmake/dependencies.cmake | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index bb495814..7737d261 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -109,6 +109,8 @@ if (NOT LIBAPPIMAGE_SHARED_ONLY) find_package(Boost 1.53.0 REQUIRED) ## XdgUtils + set(USE_SYSTEM_XDGUTILS OFF CACHE BOOL "Use system xdgutils instead of building our own") + if(USE_SYSTEM_XDGUTILS) find_package(XdgUtils REQUIRED COMPONENTS DesktopEntry BaseDir) else()