Skip to content

Commit

Permalink
xar: 1.6.1 -> 498 (#329721)
Browse files Browse the repository at this point in the history
  • Loading branch information
emilazy authored Aug 27, 2024
2 parents 740804d + 5eee6cf commit e1c3167
Show file tree
Hide file tree
Showing 25 changed files with 2,489 additions and 93 deletions.
178 changes: 178 additions & 0 deletions pkgs/by-name/xa/xar/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
{
lib,
stdenv,
fetchFromGitHub,
applyPatches,
autoreconfHook,
nix-update-script,

# Required dependencies.
openssl,
zlib,
libxml2,

# Optional dependencies.
e2fsprogs,
bzip2,
xz, # lzma

# Platform-specific dependencies.
acl,
musl-fts,

# for tests
testers,
python3,
libxslt, # xsltproc
runCommand,
runCommandCC,
makeWrapper,
xar,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "xar";
version = "498";

src = fetchFromGitHub {
owner = "apple-oss-distributions";
repo = "xar";
rev = "xar-${finalAttrs.version}";
hash = "sha256-RyWeR/ZnDBHIZhwzVxETdrTTPQA2VgsLZegRkxX1240=";
};

# Update patch set with
# git clone https://github.com/apple-oss-distributions/xar
# cd xar
# git switch -c nixpkgs
# git am ../pkgs/by-name/xa/xar/patches/*
# # …
# rm -r ../pkgs/by-name/xa/xar/patches
# git format-patch --zero-commit --output-directory ../pkgs/by-name/xa/xar/patches main
patches = lib.filesystem.listFilesRecursive ./patches;

# We do not use or modify files outside of the xar subdirectory.
patchFlags = [ "-p2" ];
sourceRoot = "source/xar";

outputs = [
"out"
"lib"
"dev"
];

strictDeps = true;

nativeBuildInputs = [ autoreconfHook ];

# For some reason libxml2 package headers are in subdirectory and thus aren’t
# picked up by stdenv’s C compiler wrapper (see ccWrapper_addCVars). This
# doesn’t really belong here and either should be part of libxml2 package or
# libxml2 in Nixpkgs can just fix their header paths.
env.NIX_CFLAGS_COMPILE = "-isystem ${libxml2.dev}/include/libxml2";

buildInputs =
[
# NB we use OpenSSL instead of CommonCrypto on Darwin.
openssl
zlib
libxml2
bzip2
xz
e2fsprogs
]
++ lib.optional stdenv.hostPlatform.isLinux acl ++ lib.optional stdenv.hostPlatform.isMusl musl-fts;

passthru =
let
patchedSource = applyPatches { inherit (finalAttrs) src patches; };
pythonForTests = python3.withPackages (p: [ p.xattr ]);
in
{
# Tests xar outside of the Nix sandbox (extended attributes are not supported
# in Nix sandbox, e.g. filtered with seccomp on Linux).
#
# Run with
# $ nix run --file . xar.impureTests.integrationTest
# Ensure that all tests are PASSED and none are FAILED or SKIPPED.
impureTests.integrationTest =
runCommand "xar-impure-tests-integration-test"
{
src = patchedSource;
xar = finalAttrs.finalPackage;
xsltproc = lib.getBin libxslt;
pythonInterpreter = pythonForTests.interpreter;
nativeBuildInputs = [ makeWrapper ];
}
''
makeWrapper "$pythonInterpreter" "$out/bin/$name" \
--prefix PATH : "$xar/bin" \
--suffix PATH : "$xsltproc/bin" \
--add-flags -- \
--add-flags "$src/xar/test/run-all.py"
'';

tests = lib.optionalAttrs (stdenv.buildPlatform.canExecute stdenv.hostPlatform) {
version = testers.testVersion {
package = finalAttrs.finalPackage;
version = "1.8dev";
};

integrationTest =
runCommand "xar-tests-integration-test"
{
src = patchedSource;
strictDeps = true;
pythonExecutable = pythonForTests.executable;
nativeBuildInputs = [
finalAttrs.finalPackage
pythonForTests
libxslt
];
}
''
"$pythonExecutable" "$src"/xar/test/run-all.py
touch "$out"
'';

smokeTest =
runCommandCC "xar-tests-smoke-test"
{
src = patchedSource;
strictDeps = true;
nativeBuildInputs = [ finalAttrs.finalPackage ];
buildInputs = [
finalAttrs.finalPackage
openssl
];
}
''
cp "$src"/xar/test/{buffer.c,validate.c} .
"$CC" -lxar -o buffer buffer.c
"$CC" -lxar -lcrypto -o validate validate.c
./buffer validate.c
xar -x -f test.xar
diff validate.c mydir/secondfile
./validate test.xar
touch "$out"
'';
};

updateScript = nix-update-script {
extraArgs = [
"--version-regex"
"xar-(.*)"
];
};
};

meta = {
homepage = "https://github.com/apple-oss-distributions/xar";
description = "An easily extensible archive format";
license = lib.licenses.bsd3;
maintainers =
lib.teams.darwin.members
++ lib.attrValues { inherit (lib.maintainers) copumpkin tie; };
platforms = lib.platforms.unix;
mainProgram = "xar";
};
})
Loading

0 comments on commit e1c3167

Please sign in to comment.