python312Packages.shiv: 1.0.7 -> 1.0.8 (#364744)
[NixPkgs.git] / pkgs / by-name / ze / zerotierone / package.nix
blob8f5f2dcb1422a8d3c8f40bef4875525f5ce6211e
2   lib,
3   stdenv,
4   rustPlatform,
5   fetchFromGitHub,
6   buildPackages,
7   cargo,
8   lzo,
9   openssl,
10   pkg-config,
11   ronn,
12   rustc,
13   zlib,
14   libiconv,
15   darwin,
16   fetchpatch,
19 let
20   pname = "zerotierone";
21   version = "1.14.0";
23   src = fetchFromGitHub {
24     owner = "zerotier";
25     repo = "ZeroTierOne";
26     rev = version;
27     hash = "sha256-YWcqALUB3ZEukL4er2FKcyNdEbuaf//QU5hRbKAfxDA=";
28   };
31 stdenv.mkDerivation {
32   inherit pname version src;
34   cargoDeps = rustPlatform.importCargoLock {
35     lockFile = ./Cargo.lock;
36     outputHashes = {
37       "jwt-0.16.0" = "sha256-P5aJnNlcLe9sBtXZzfqHdRvxNfm6DPBcfcKOVeLZxcM=";
38       "rustfsm-0.1.0" = "sha256-q7J9QgN67iuoNhQC8SDVzUkjCNRXGiNCkE8OsQc5+oI=";
39     };
40   };
41   patches = [
42     # https://github.com/zerotier/ZeroTierOne/pull/2314
43     (fetchpatch {
44       url = "https://github.com/zerotier/ZeroTierOne/commit/f9c6ee0181acb1b77605d9a4e4106ac79aaacca3.patch";
45       hash = "sha256-zw7KmaxiCH99Y0wQtOQM4u0ruxiePhvv/birxMQioJU=";
46     })
47     ./0001-darwin-disable-link-time-optimization.patch
48   ];
49   postPatch = ''
50     cp ${./Cargo.lock} Cargo.lock
51     cp ${./Cargo.lock} rustybits/Cargo.lock
52   '';
54   preConfigure = ''
55     cmp ./Cargo.lock ./rustybits/Cargo.lock || {
56       echo 1>&2 "Please make sure that the derivation's Cargo.lock is identical to ./rustybits/Cargo.lock!"
57       exit 1
58     }
60     patchShebangs ./doc/build.sh
61     substituteInPlace ./doc/build.sh \
62       --replace '/usr/bin/ronn' '${buildPackages.ronn}/bin/ronn' \
64     substituteInPlace ./make-linux.mk \
65       --replace '-march=armv6zk' "" \
66       --replace '-mcpu=arm1176jzf-s' ""
67   '';
69   nativeBuildInputs = [
70     pkg-config
71     ronn
72     rustPlatform.cargoSetupHook
73     cargo
74     rustc
75   ];
77   buildInputs =
78     [
79       lzo
80       openssl
81       zlib
82     ]
83     ++ lib.optionals stdenv.hostPlatform.isDarwin [
84       libiconv
85       darwin.apple_sdk.frameworks.SystemConfiguration
86       darwin.apple_sdk.frameworks.CoreServices
87     ];
89   enableParallelBuilding = true;
91   # Ensure Rust compiles for the right target
92   env.CARGO_BUILD_TARGET = stdenv.hostPlatform.rust.rustcTarget;
94   preBuild =
95     if stdenv.hostPlatform.isDarwin then
96       ''
97         makeFlagsArray+=("ARCH_FLAGS=") # disable multi-arch build
98         if ! grep -q MACOS_VERSION_MIN=10.13 make-mac.mk; then
99           echo "You may need to update MACOSX_DEPLOYMENT_TARGET to match the value in make-mac.mk"
100           exit 1
101         fi
102         (cd rustybits && MACOSX_DEPLOYMENT_TARGET=10.13 cargo build -p zeroidc --release)
104         cp \
105           ./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \
106           ./rustybits/target
108         # zerotier uses the "FORCE" target as a phony target to force rebuilds.
109         # We don't want to rebuild libzeroidc.a as we build want to build this library ourself for a single architecture
110         touch FORCE
111       ''
112     else
113       ''
114         # Cargo won't compile to target/release but to target/<RUST_TARGET>/release when a target is
115         # explicitly defined. The build-system however expects target/release. Hence we just symlink from
116         # the latter to the former.
117         mkdir -p rustybits/target/release
118         ln -rs \
119           ./rustybits/target/${stdenv.hostPlatform.rust.rustcTarget}/release/libzeroidc.a \
120           ./rustybits/target/release/
121       '';
123   buildFlags = [
124     "all"
125     "selftest"
126   ];
128   doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
129   checkPhase = ''
130     runHook preCheck
131     ./zerotier-selftest
132     runHook postCheck
133   '';
135   installFlags = [
136     # only linux has an install target, we borrow this for macOS as well
137     "-f"
138     "make-linux.mk"
139     "DESTDIR=$$out/upstream"
140   ];
142   postInstall = ''
143     mv $out/upstream/usr/sbin $out/bin
145     mkdir -p $man/share
146     mv $out/upstream/usr/share/man $man/share/man
148     rm -rf $out/upstream
149   '';
151   outputs = [
152     "out"
153     "man"
154   ];
156   passthru.updateScript = ./update.sh;
158   meta = with lib; {
159     description = "Create flat virtual Ethernet networks of almost unlimited size";
160     homepage = "https://www.zerotier.com";
161     license = licenses.bsl11;
162     maintainers = with maintainers; [
163       sjmackenzie
164       zimbatm
165       ehmry
166       obadz
167       danielfullmer
168       mic92 # also can test darwin
169     ];
170     platforms = platforms.unix;
171   };