-
-
Notifications
You must be signed in to change notification settings - Fork 14.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This change switches the xar package from unmaintained fork of the original project to the Apple Open Source tarball. See also https://repology.org/project/xar/versions Since the package is essentially rewritten from scratch, we take an opportunity and move it to pkgs/by-name/xa/xar (formatted with nixfmt). We also remove Windows from the supported platforms because even before this change pkgsCross.mingwW64.xar failed with xar> configure: error: can not detect the size of your system's uid_t type
- Loading branch information
Showing
23 changed files
with
2,435 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"; | ||
}; | ||
}) |
Oops, something went wrong.