status-mobile/nix/desktop/linux/appimagekit/default.nix

123 lines
3.2 KiB
Nix

{ stdenv, fetchFromGitHub
, pkgconfig, cmake, autoconf, automake, libtool
, wget, xxd, desktop-file-utils, file
, gnupg, glib, zlib, cairo, openssl, fuse, xz, squashfuse, inotify-tools, libarchive
, squashfsTools
, gtest
}:
let
owner = "AppImage";
repo = "AppImageKit";
rev = "b0859501df61cde198b54a317c03b41dbafc98b1";
sha256 = "0qqg79jw9w9rs8c2w3lla4kz62ihafrf7jm370pp1dl8y2i81jzg";
appimagekit_src = fetchFromGitHub {
name = "${repo}-${stdenv.lib.strings.substring 0 7 rev}-source";
inherit owner repo rev sha256;
};
# squashfuse adapted to nix from cmake experession in "${appimagekit_src}/cmake/dependencies.cmake"
appimagekit_squashfuse = squashfuse.overrideAttrs (attrs: rec {
pname = "squashfuse";
version = "20161009";
src = fetchFromGitHub {
name = "squashfuse-source";
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 {
pname = "appimagekit";
version = "20180727";
src = appimagekit_src;
patches = [ ./nix.patch ];
nativeBuildInputs = [
pkgconfig cmake autoconf automake libtool wget xxd
desktop-file-utils
];
buildInputs = [
gnupg
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"}"
];
postInstall = ''
cp "${stdenv.lib.makeBinPath [ squashfsTools ]}/mksquashfs" "$out/lib/appimagekit/"
cp "${stdenv.lib.makeBinPath [ desktop-file-utils ]}/desktop-file-validate" "$out/bin"
'';
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;
};
}