124 lines
3.2 KiB
Nix
124 lines
3.2 KiB
Nix
|
{ stdenv, fetchFromGitHub
|
||
|
, pkgconfig, cmake, autoconf, automake, libtool, makeWrapper
|
||
|
, wget, xxd, desktop-file-utils, file
|
||
|
, gnupg, 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 makeWrapper
|
||
|
];
|
||
|
|
||
|
postPatch = ''
|
||
|
substituteInPlace src/appimagetool.c --replace "/usr/bin/file" "${file}/bin/file"
|
||
|
'';
|
||
|
|
||
|
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"
|
||
|
];
|
||
|
|
||
|
postInstall = ''
|
||
|
cp "${squashfsTools}/bin/mksquashfs" "$out/lib/appimagekit/"
|
||
|
cp "${desktop-file-utils}/bin/desktop-file-validate" "$out/bin"
|
||
|
|
||
|
wrapProgram "$out/bin/appimagetool" \
|
||
|
--prefix PATH : "${stdenv.lib.makeBinPath [ file gnupg ]}"
|
||
|
'';
|
||
|
|
||
|
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;
|
||
|
};
|
||
|
}
|