175 lines
3.8 KiB
Nix
175 lines
3.8 KiB
Nix
{
|
|
lib,
|
|
stdenv,
|
|
fetchFromGitHub,
|
|
pkg-config,
|
|
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 = "8bbf694455d00f48d835f56afaa1dabcd9178ba6";
|
|
hash = "sha256-pqg+joomC5CI9WdKP/h/XKPsruMgZEaIOjPLOqnNPZw=";
|
|
fetchSubmodules = true;
|
|
};
|
|
|
|
# squashfuse adapted to nix from cmake expression in "${appimagekit_src}/lib/libappimage/cmake/dependencies.cmake"
|
|
appimagekit_squashfuse = squashfuse.overrideAttrs rec {
|
|
pname = "squashfuse";
|
|
version = "unstable-2016-10-09";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "vasi";
|
|
repo = pname;
|
|
rev = "1f980303b89c779eabfd0a0fdd36d6a7a311bf92";
|
|
sha256 = "sha256-BZd1+7sRYZHthULKk3RlgMIy4uCUei45GbSEiZxLPFM=";
|
|
};
|
|
|
|
patches = [
|
|
"${appimagekit_src}/lib/libappimage/src/patches/squashfuse.patch"
|
|
"${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.patch"
|
|
];
|
|
|
|
postPatch = ''
|
|
cp -v ${appimagekit_src}/lib/libappimage/src/patches/squashfuse_dlopen.[hc] .
|
|
'';
|
|
|
|
# Workaround build failure on -fno-common toolchains:
|
|
# ld: libsquashfuse_ll.a(libfuseprivate_la-fuseprivate.o):(.bss+0x8):
|
|
# multiple definition of `have_libloaded'; runtime.4.o:(.bss.have_libloaded+0x0): first defined here
|
|
env.NIX_CFLAGS_COMPILE = "-fcommon";
|
|
|
|
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 = "unstable-2020-12-31";
|
|
|
|
src = appimagekit_src;
|
|
|
|
patches = [ ./nix.patch ];
|
|
|
|
postPatch = ''
|
|
patchShebangs src/embed-magic-bytes-in-file.sh
|
|
'';
|
|
|
|
nativeBuildInputs = [
|
|
pkg-config
|
|
cmake
|
|
autoconf
|
|
automake
|
|
libtool
|
|
wget
|
|
xxd
|
|
desktop-file-utils
|
|
makeWrapper
|
|
];
|
|
|
|
buildInputs = [
|
|
glib
|
|
zlib
|
|
cairo
|
|
openssl
|
|
fuse
|
|
xz
|
|
inotify-tools
|
|
libarchive
|
|
squashfsTools
|
|
appimagekit_squashfuse
|
|
];
|
|
|
|
preConfigure = ''
|
|
export HOME=$(pwd)
|
|
'';
|
|
|
|
cmakeFlags = [
|
|
"-DUSE_SYSTEM_XZ=ON"
|
|
"-DUSE_SYSTEM_SQUASHFUSE=ON"
|
|
"-DSQUASHFUSE=${appimagekit_squashfuse}"
|
|
"-DUSE_SYSTEM_LIBARCHIVE=ON"
|
|
"-DUSE_SYSTEM_GTEST=ON"
|
|
"-DUSE_SYSTEM_MKSQUASHFS=ON"
|
|
"-DTOOLS_PREFIX=${stdenv.cc.targetPrefix}"
|
|
];
|
|
|
|
postInstall = ''
|
|
mkdir -p $out/lib/appimagekit
|
|
cp "${squashfsTools}/bin/mksquashfs" "$out/lib/appimagekit/"
|
|
cp "${desktop-file-utils}/bin/desktop-file-validate" "$out/bin"
|
|
|
|
wrapProgram "$out/bin/appimagetool" \
|
|
--prefix PATH : "${
|
|
lib.makeBinPath [
|
|
file
|
|
gnupg
|
|
]
|
|
}" \
|
|
--unset SOURCE_DATE_EPOCH
|
|
'';
|
|
|
|
nativeCheckInputs = [ gtest ];
|
|
|
|
# for debugging
|
|
passthru = {
|
|
squashfuse = appimagekit_squashfuse;
|
|
};
|
|
|
|
meta = with lib; {
|
|
description = "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;
|
|
maintainers = with maintainers; [ taeer ];
|
|
homepage = src.meta.homepage;
|
|
platforms = platforms.linux;
|
|
};
|
|
}
|