mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-15 14:26:33 +01:00
e0816431a2
Otherwise references to the Python interpreter inside the set are wrong, as demonstrated by: ``` nix with import <nixpkgs> { }; let python' = python3.override { packageOverrides = final: prev: { requests = prev.requests.overridePythonAttrs(old: { version = "1337"; }); }; }; in python'.pkgs.python.pkgs.requests ``` which returns the _non_ overriden requests. And the same with `self`: ``` with import <nixpkgs> { }; let python' = python3.override { self = python'; packageOverrides = final: prev: { requests = prev.requests.overridePythonAttrs(old: { version = "1337"; }); }; }; in python'.pkgs.python.pkgs.requests ``` which returns the overriden requests. This can manifest itself as file collisions when constructing environments or as subtly incorrect dependency graphs.
122 lines
3.4 KiB
Nix
122 lines
3.4 KiB
Nix
{ stdenvNoCC
|
|
, callPackage
|
|
, fetchFromGitHub
|
|
, buildPackages
|
|
, lib
|
|
, enableMalloc ? false
|
|
, noPackedStructs ? false
|
|
, maxRequiredFields ? null
|
|
, field32bit ? false
|
|
, noErrmsg ? false
|
|
, bufferOnly ? false
|
|
, systemHeader ? null
|
|
, without64bit ? false
|
|
, encodeArraysUnpacked ? false
|
|
, convertDoubleFloat ? false
|
|
, validateUtf8 ? false
|
|
, littleEndian8bit ? false
|
|
, c99StaticAssert ? false
|
|
, noStaticAssert ? false
|
|
}:
|
|
stdenvNoCC.mkDerivation (self:
|
|
let
|
|
generator-out = buildPackages.callPackage ./generator-out.nix { inherit (self) src version; };
|
|
python-module = buildPackages.callPackage ./python-module.nix {
|
|
inherit (self) version;
|
|
inherit (self.passthru) generator-out;
|
|
};
|
|
python3 = buildPackages.python3.override {
|
|
self = python3;
|
|
packageOverrides = _: _: {
|
|
nanopb-proto = self.passthru.python-module;
|
|
};
|
|
};
|
|
generator = buildPackages.callPackage ./generator.nix {
|
|
inherit python3;
|
|
inherit (self) version;
|
|
inherit (self.passthru) generator-out;
|
|
};
|
|
runtime = callPackage ./runtime.nix {
|
|
inherit python3;
|
|
inherit (self) src version;
|
|
inherit
|
|
enableMalloc
|
|
noPackedStructs
|
|
maxRequiredFields
|
|
field32bit
|
|
noErrmsg
|
|
bufferOnly
|
|
systemHeader
|
|
without64bit
|
|
encodeArraysUnpacked
|
|
convertDoubleFloat
|
|
validateUtf8
|
|
littleEndian8bit
|
|
c99StaticAssert
|
|
noStaticAssert;
|
|
};
|
|
in
|
|
{
|
|
pname = "nanopb";
|
|
version = "0.4.8";
|
|
|
|
src = fetchFromGitHub {
|
|
owner = "nanopb";
|
|
repo = "nanopb";
|
|
rev = self.version;
|
|
hash = "sha256-LfARVItT+7dczg2u08RlXZLrLR7ScvC44tgmcy/Zv48=";
|
|
};
|
|
|
|
dontPatch = true;
|
|
dontUnpack = true;
|
|
|
|
propagatedNativeBuildInputs = [ generator ];
|
|
|
|
propagatedBuildInputs = [ runtime ];
|
|
|
|
postInstall = ''
|
|
mkdir $out
|
|
ln -s ${generator}/bin $out/bin
|
|
ln -s ${runtime}/include $out/include
|
|
ln -s ${runtime}/lib $out/lib
|
|
mkdir -p $out/share/nanopb/generator/proto
|
|
ln -s ${self.src}/generator/proto/nanopb.proto $out/share/nanopb/generator/proto/nanopb.proto
|
|
'';
|
|
|
|
passthru = {
|
|
inherit runtime generator-out python-module generator;
|
|
tests = {
|
|
simple-proto2 = callPackage ./test-simple-proto2 { };
|
|
simple-proto3 = callPackage ./test-simple-proto3 { };
|
|
message-with-annotations = callPackage ./test-message-with-annotations { };
|
|
message-with-options = callPackage ./test-message-with-options { };
|
|
};
|
|
};
|
|
|
|
meta = with lib; {
|
|
platforms = platforms.all;
|
|
|
|
description = "Protocol Buffers with small code size";
|
|
homepage = "https://jpa.kapsi.fi/nanopb/";
|
|
license = licenses.zlib;
|
|
maintainers = with maintainers; [ kalbasit liarokapisv ];
|
|
|
|
longDescription = ''
|
|
Nanopb is a small code-size Protocol Buffers implementation in ansi C. It
|
|
is especially suitable for use in microcontrollers, but fits any memory
|
|
restricted system.
|
|
|
|
- Homepage: jpa.kapsi.fi/nanopb
|
|
- Documentation: jpa.kapsi.fi/nanopb/docs
|
|
- Downloads: jpa.kapsi.fi/nanopb/download
|
|
- Forum: groups.google.com/forum/#!forum/nanopb
|
|
|
|
In order to use the nanopb options in your proto files, you'll need to
|
|
tell protoc where to find the nanopb.proto file.
|
|
You can do so with the --proto_path (-I) option to add the directory
|
|
''${nanopb}/share/nanopb/generator/proto like so:
|
|
|
|
protoc --proto_path=. --proto_path=''${nanopb}/share/nanopb/generator/proto --plugin=protoc-gen-nanopb=''${nanopb}/bin/protoc-gen-nanopb --nanopb_out=out file.proto
|
|
'';
|
|
};
|
|
})
|