summary refs log tree commit diff
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2018-08-06 11:14:59 -0400
committerGitHub <noreply@github.com>2018-08-06 11:14:59 -0400
commit0590b3106b6aadf13b90109a4edd1b5780f75c9a (patch)
tree83838fb75f03ded201b7d72e6ad750cafb6e0310
parentfb333054231ad8c35785394eb4c988f2019468ea (diff)
parent1e3c993286d50deed719467aab0f8af3b29c8c4e (diff)
downloadnixlib-0590b3106b6aadf13b90109a4edd1b5780f75c9a.tar
nixlib-0590b3106b6aadf13b90109a4edd1b5780f75c9a.tar.gz
nixlib-0590b3106b6aadf13b90109a4edd1b5780f75c9a.tar.bz2
nixlib-0590b3106b6aadf13b90109a4edd1b5780f75c9a.tar.lz
nixlib-0590b3106b6aadf13b90109a4edd1b5780f75c9a.tar.xz
nixlib-0590b3106b6aadf13b90109a4edd1b5780f75c9a.tar.zst
nixlib-0590b3106b6aadf13b90109a4edd1b5780f75c9a.zip
Merge pull request #44520 from oxij/pkg/appimagekit
appimagekit: init at 20180727
-rw-r--r--pkgs/tools/package-management/appimagekit/default.nix112
-rw-r--r--pkgs/tools/package-management/appimagekit/nix.patch174
-rw-r--r--pkgs/top-level/all-packages.nix2
3 files changed, 288 insertions, 0 deletions
diff --git a/pkgs/tools/package-management/appimagekit/default.nix b/pkgs/tools/package-management/appimagekit/default.nix
new file mode 100644
index 000000000000..2c389c144b1e
--- /dev/null
+++ b/pkgs/tools/package-management/appimagekit/default.nix
@@ -0,0 +1,112 @@
+{ stdenv, fetchFromGitHub
+, pkgconfig, cmake, autoconf, automake, libtool
+, wget, xxd, desktop-file-utils
+, glib, zlib, cairo, openssl, fuse, xz, squashfuse, inotify-tools, libarchive
+, squashfsTools
+, gtest
+}:
+
+let
+
+  appimagekit_src = fetchFromGitHub {
+    owner = "AppImage";
+    repo = "AppImageKit";
+    rev = "b0859501df61cde198b54a317c03b41dbafc98b1";
+    sha256 = "0qqg79jw9w9rs8c2w3lla4kz62ihafrf7jm370pp1dl8y2i81jzg";
+  };
+
+  # squashfuse adapted to nix from cmake experession in "${appimagekit_src}/cmake/dependencies.cmake"
+  appimagekit_squashfuse = squashfuse.overrideAttrs (attrs: rec {
+    name = "squashfuse-${version}";
+    version = "20161009";
+
+    src = fetchFromGitHub {
+      owner = "vasi";
+      repo  = "squashfuse";
+      rev   = "1f980303b89c779eabfd0a0fdd36d6a7a311bf92";
+      sha256 = "0lrw9ff8k15l34wjwyllw3i35hl0cms97jj2hpnr2q8ipgxpb5q5";
+    };
+
+    patches = [
+      "${appimagekit_src}/squashfuse.patch"
+      "${appimagekit_src}/squashfuse_dlopen.patch"
+    ];
+
+    postPatch = ''
+      cp -v ${appimagekit_src}/squashfuse_dlopen.[hc] .
+    '';
+
+    preConfigure = ''
+      sed -i "/PKG_CHECK_MODULES.*/,/,:./d" configure
+      sed -i "s/typedef off_t sqfs_off_t/typedef int64_t sqfs_off_t/g" common.h
+    '';
+
+    configureFlags = [
+      "--disable-demo" "--disable-high-level" "--without-lzo" "--without-lz4"
+    ];
+
+    postConfigure = ''
+      sed -i "s|XZ_LIBS = -llzma |XZ_LIBS = -Bstatic -llzma/|g" Makefile
+    '';
+
+    # only static libs and header files
+    installPhase = ''
+      mkdir -p $out/lib $out/include
+      cp -v ./.libs/*.a $out/lib
+      cp -v ./*.h $out/include
+    '';
+  });
+
+in stdenv.mkDerivation rec {
+  name = "appimagekit-20180727";
+
+  src = appimagekit_src;
+
+  patches = [ ./nix.patch ];
+
+  nativeBuildInputs = [
+    pkgconfig cmake autoconf automake libtool wget xxd
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    glib zlib cairo openssl fuse
+    xz inotify-tools libarchive
+    squashfsTools
+  ];
+
+  preConfigure = ''
+    export HOME=$(pwd)
+  '';
+
+  cmakeFlags = [
+    "-DUSE_SYSTEM_XZ=ON"
+    "-DUSE_SYSTEM_SQUASHFUSE=ON"
+    "-DSQUASHFUSE=${appimagekit_squashfuse}"
+    "-DUSE_SYSTEM_INOTIFY_TOOLS=ON"
+    "-DUSE_SYSTEM_LIBARCHIVE=ON"
+    "-DUSE_SYSTEM_GTEST=ON"
+    "-DUSE_SYSTEM_MKSQUASHFS=ON"
+    "-DBUILD_TESTING=${if doCheck then "ON" else "OFF"}"
+  ];
+
+  checkInputs = [ gtest ];
+  doCheck = false; # fails 1 out of 4 tests, I'm too lazy to debug why
+
+  # for debugging
+  passthru = {
+    squashfuse = appimagekit_squashfuse;
+  };
+
+  meta = with stdenv.lib; {
+    description = "A tool to package desktop applications as AppImages";
+    longDescription = ''
+      AppImageKit is an implementation of the AppImage format that
+      provides tools such as appimagetool and appimaged for handling
+      AppImages.
+    '';
+    license = licenses.mit;
+    homepage = src.meta.homepage;
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/tools/package-management/appimagekit/nix.patch b/pkgs/tools/package-management/appimagekit/nix.patch
new file mode 100644
index 000000000000..9725cef5ba7d
--- /dev/null
+++ b/pkgs/tools/package-management/appimagekit/nix.patch
@@ -0,0 +1,174 @@
+diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake
+index ea133a3..916606c 100644
+--- a/cmake/dependencies.cmake
++++ b/cmake/dependencies.cmake
+@@ -224,21 +224,23 @@ if(NOT USE_SYSTEM_XZ)
+         LIBRARY_DIRS <INSTALL_DIR>/lib/
+         LIBRARIES "<INSTALL_DIR>/lib/liblzma.a"
+         INCLUDE_DIRS "<SOURCE_DIR>/src/liblzma/api/"
+     )
+ else()
+     message(STATUS "Using system xz")
+ 
+     import_pkgconfig_target(TARGET_NAME xz PKGCONFIG_TARGET liblzma STATIC)
+ endif()
+ 
++set(USE_SYSTEM_SQUASHFUSE OFF CACHE BOOL "Use system squashfuse instead of building our own")
+ 
++if(NOT USE_SYSTEM_SQUASHFUSE)
+ # as distros don't provide suitable squashfuse and squashfs-tools, those dependencies are bundled in, can, and should
+ # be used from this repository
+ # TODO: implement out-of-source builds for squashfuse, as for the other dependencies
+ configure_file(
+     ${CMAKE_CURRENT_SOURCE_DIR}/src/patch-squashfuse.sh.in
+     ${CMAKE_CURRENT_BINARY_DIR}/patch-squashfuse.sh
+     @ONLY
+ )
+ 
+ ExternalProject_Add(squashfuse-EXTERNAL
+@@ -259,20 +261,34 @@ ExternalProject_Add(squashfuse-EXTERNAL
+     BUILD_IN_SOURCE ON
+     INSTALL_COMMAND ${MAKE} install
+ )
+ 
+ import_external_project(
+     TARGET_NAME squashfuse
+     EXT_PROJECT_NAME squashfuse-EXTERNAL
+     LIBRARIES "<SOURCE_DIR>/.libs/libsquashfuse.a;<SOURCE_DIR>/.libs/libsquashfuse_ll.a;<SOURCE_DIR>/.libs/libfuseprivate.a"
+     INCLUDE_DIRS "<SOURCE_DIR>"
+ )
++else()
++    message(STATUS "Using system squashfsfuse from ${SQUASHFUSE}")
++
++    add_library(squashfuse INTERFACE IMPORTED GLOBAL)
++
++    set(squashfuse_INCLUDE_DIRS "${SQUASHFUSE}/include")
++    set(squashfuse_LIBRARIES "${SQUASHFUSE}/lib/libsquashfuse.a;${SQUASHFUSE}/lib/libsquashfuse_ll.a;${SQUASHFUSE}/lib/libfuseprivate.a")
++
++    set_property(
++      TARGET squashfuse
++      PROPERTY INTERFACE_LINK_LIBRARIES ${squashfuse_LIBRARIES}
++    )
++    include_directories(${squashfuse_INCLUDE_DIRS})
++endif()
+ 
+ 
+ set(USE_SYSTEM_INOTIFY_TOOLS OFF CACHE BOOL "Use system libinotifytools instead of building our own")
+ 
+ if(NOT USE_SYSTEM_INOTIFY_TOOLS)
+     message(STATUS "Downloading and building inotify-tools")
+ 
+     # TODO: build out of source
+     ExternalProject_Add(inotify-tools-EXTERNAL
+         URL https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
+@@ -345,20 +361,23 @@ if(NOT USE_SYSTEM_GTEST)
+             INCLUDE_DIRS "<INSTALL_DIR>/include/"
+         )
+     else()
+         message(STATUS "Using system GTest")
+ 
+         import_find_pkg_target(gtest GTest GTEST)
+     endif()
+ endif()
+ 
+ 
++set(USE_SYSTEM_MKSQUASHFS OFF CACHE BOOL "Use system mksquashfs instead of downloading and building our own")
++
++if(NOT USE_SYSTEM_MKSQUASHFS)
+ # TODO: allow using system wide mksquashfs
+ set(mksquashfs_cflags "-DXZ_SUPPORT ${CFLAGS}")
+ 
+ if(xz_LIBRARIES MATCHES "\\.a$")
+     set(mksquashfs_ldflags "${xz_LIBRARIES}")
+ else()
+     set(mksquashfs_ldflags "-l${xz_LIBRARIES}")
+ endif()
+ 
+ if(xz_INCLUDE_DIRS)
+@@ -385,20 +404,25 @@ ExternalProject_Add(mksquashfs
+     INSTALL_COMMAND ${MAKE} -C squashfs-tools/ install INSTALL_DIR=<INSTALL_DIR>
+ )
+ 
+ ExternalProject_Get_Property(mksquashfs INSTALL_DIR)
+ set(mksquashfs_INSTALL_DIR "${INSTALL_DIR}")
+ mark_as_advanced(mksquashfs_INSTALL_DIR)
+ 
+ # for later use when packaging as an AppImage
+ set(mksquashfs_BINARY "${mksquashfs_INSTALL_DIR}/mksquashfs")
+ mark_as_advanced(mksquashfs_BINARY)
++else()
++    message(STATUS "Using system mksquashfs")
++
++    set(mksquashfs_BINARY "mksquashfs")
++endif()
+ 
+ 
+ #### 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()
+     if(TARGET mksquashfs)
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 3f25442..974ed0e 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -197,27 +197,27 @@ target_include_directories(digest_md5
+ 
+ target_link_libraries(digest_md5
+     PRIVATE
+     libglib
+ )
+ 
+ 
+ # install binaries
+ if(AUXILIARY_FILES_DESTINATION)
+     install(
+-        PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
++        PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/runtime
+         DESTINATION ${AUXILIARY_FILES_DESTINATION}
+         COMPONENT applications
+     )
+ else()
+     install(
+-        PROGRAMS ${mksquashfs_INSTALL_DIR}/mksquashfs ${CMAKE_CURRENT_BINARY_DIR}/runtime
++        PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/runtime
+         DESTINATION bin
+         COMPONENT applications
+     )
+ endif()
+ 
+ install(
+     TARGETS AppRun appimagetool digest validate
+     RUNTIME DESTINATION bin COMPONENT applications
+     LIBRARY DESTINATION lib COMPONENT applications
+     ARCHIVE DESTINATION lib/static COMPONENT applications
+diff --git a/src/shared.c b/src/shared.c
+index cf5fd5c..4f48dbc 100644
+--- a/src/shared.c
++++ b/src/shared.c
+@@ -34,21 +34,21 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <dirent.h>
+ #include <errno.h>
+ 
+ #include <glib.h>
+ #include <glib/gprintf.h>
+ #include <glib/gstdio.h>
+ #include <gio/gio.h>
+ 
+-#include "squashfuse.h"
++#include <squashfuse.h>
+ #include <squashfs_fs.h>
+ #include "getsection.h"
+ #include "elf.h"
+ 
+ #include "xdg-basedir.h"
+ 
+ // own header
+ #include "shared.h"
+ 
+ #if HAVE_LIBARCHIVE3 == 1 // CentOS
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c060110f0eec..7e94689a3489 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -508,6 +508,8 @@ with pkgs;
 
   appimage-run = callPackage ../tools/package-management/appimage-run {};
 
+  appimagekit = callPackage ../tools/package-management/appimagekit {};
+
   apt-cacher-ng = callPackage ../servers/http/apt-cacher-ng { };
 
   apt-offline = callPackage ../tools/misc/apt-offline { };