122 lines
3.5 KiB
Nix
122 lines
3.5 KiB
Nix
{
|
|
lib,
|
|
buildPythonPackage,
|
|
cbor2,
|
|
docopt,
|
|
fetchFromGitHub,
|
|
fetchpatch2,
|
|
jsonconversion,
|
|
pytestCheckHook,
|
|
pytest_7,
|
|
setuptools,
|
|
six,
|
|
tabulate,
|
|
cmake,
|
|
}:
|
|
|
|
buildPythonPackage rec {
|
|
pname = "amazon-ion";
|
|
version = "0.13.0";
|
|
pyproject = true;
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "amazon-ion";
|
|
repo = "ion-python";
|
|
tag = "v${version}";
|
|
# Test vectors require git submodule
|
|
fetchSubmodules = true;
|
|
leaveDotGit = true; # During ion-c submodule build git history/hash used to infer version
|
|
postFetch = ''
|
|
# Generated file should match output of command in ion-c/cmake/VersionHeader.cmake
|
|
# Run Git before creating any files to avoid triggering false dirty suffix.
|
|
(cd "$out/ion-c" && v="$(git describe --long --tags --dirty --match "v*")" && echo -n "$v" > .nixpkgs-patching-IONC_FULL_VERSION.txt)
|
|
|
|
# Based on https://github.com/NixOS/nixpkgs/blob/183125f9/pkgs/build-support/fetchgit/nix-prefetch-git#L358
|
|
find "$out" -name .git -exec rm -rf '{}' '+'
|
|
'';
|
|
hash = "sha256-VBbxGXPAwS3jwEsm64yEKqJKVKGvPStboLjHoRcoonE=";
|
|
};
|
|
|
|
patches = [
|
|
# backport changes that adapt code to more strict compilers
|
|
(fetchpatch2 {
|
|
name = "46aebb0-Address-incompatible-pointer-errors.patch";
|
|
url = "https://github.com/amazon-ion/ion-c/commit/46aebb0b650a4cf61425ef1a8e78e2443023e853.patch?full_index=1";
|
|
hash = "sha256-5qzSbZV9Oe5soJzkyCtVtWejedLEjAz7yuVotATPmbs=";
|
|
stripLen = 1;
|
|
extraPrefix = "ion-c/";
|
|
})
|
|
];
|
|
|
|
postPatch = ''
|
|
substituteInPlace setup.py \
|
|
--replace "'pytest-runner'," ""
|
|
|
|
# Ion C building is in _download_ion_c() which will try to remove sources and re-download
|
|
substituteInPlace install.py \
|
|
--replace-fail "isdir(_CURRENT_ION_C_DIR)" "False"
|
|
substituteInPlace install.py \
|
|
--replace-fail "check_call(['git'" "check_call(['true'"
|
|
|
|
# Ion-C infers version based on Git. But there are issues with making .git folders deterministic.
|
|
# See https://github.com/NixOS/nixpkgs/issues/8567
|
|
# Hence, we'll inject version ourselves
|
|
substituteInPlace ion-c/cmake/VersionHeader.cmake \
|
|
--replace-fail 'set(IONC_FULL_VERSION "''${CMAKE_PROJECT_VERSION}")' \
|
|
"set(IONC_FULL_VERSION \"$(cat ion-c/.nixpkgs-patching-IONC_FULL_VERSION.txt)\")"
|
|
'';
|
|
|
|
build-system = [
|
|
setuptools
|
|
];
|
|
|
|
dontUseCmakeConfigure = true; # CMake invoked by install.py
|
|
|
|
# Can't use cmakeFlags since we do not control invocation of cmake.
|
|
# But build-release.sh in ion-c is sensitive to this env variable.
|
|
env.CMAKE_FLAGS = "-DCMAKE_SKIP_BUILD_RPATH=ON";
|
|
|
|
nativeBuildInputs = [
|
|
cmake
|
|
];
|
|
|
|
dependencies = [
|
|
jsonconversion
|
|
six
|
|
];
|
|
|
|
nativeCheckInputs = [
|
|
cbor2
|
|
docopt
|
|
(pytestCheckHook.override { pytest = pytest_7; })
|
|
tabulate
|
|
];
|
|
|
|
disabledTests = [
|
|
# ValueError: Exceeds the limit (4300) for integer string conversion
|
|
"test_roundtrips"
|
|
];
|
|
|
|
disabledTestPaths = [
|
|
# Exclude benchmarks
|
|
"tests/test_benchmark_cli.py"
|
|
];
|
|
|
|
pythonImportsCheck = [
|
|
"amazon.ion"
|
|
"amazon.ion.ionc" # C extension module for speedup
|
|
];
|
|
|
|
meta = {
|
|
description = "Python implementation of Amazon Ion";
|
|
homepage = "https://github.com/amazon-ion/ion-python";
|
|
changelog = "https://github.com/amazon-ion/ion-python/releases/tag/${src.tag}";
|
|
sourceProvenance = with lib.sourceTypes; [
|
|
fromSource
|
|
binaryNativeCode
|
|
];
|
|
license = lib.licenses.asl20;
|
|
maintainers = with lib.maintainers; [ terlar ];
|
|
};
|
|
}
|