rio: 0.0.36 -> 0.0.37
[NixPkgs.git] / pkgs / tools / networking / xrootd / default.nix
blob1ceb6380aaa1be20d66602914503c2ed37c036ef
1 { lib
2 , stdenv
3 , callPackage
4 , fetchFromGitHub
5 , davix
6 , cmake
7 , cppunit
8 , gtest
9 , makeWrapper
10 , pkg-config
11 , curl
12 , fuse
13 , libkrb5
14 , libuuid
15 , libxcrypt
16 , libxml2
17 , openssl
18 , readline
19 , scitokens-cpp
20 , systemd
21 , voms
22 , zlib
23   # Build bin/test-runner
24 , enableTestRunner ? true
25   # If not null, the builder will
26   # move "$out/etc" to "$out/etc.orig" and symlink "$out/etc" to externalEtc.
27 , externalEtc ? "/etc"
28 , removeReferencesTo
31 stdenv.mkDerivation (finalAttrs: {
32   pname = "xrootd";
33   version = "5.6.6";
35   src = fetchFromGitHub {
36     owner = "xrootd";
37     repo = "xrootd";
38     rev = "v${finalAttrs.version}";
39     fetchSubmodules = true;
40     hash = "sha256-vSZKTsDMY5bhfniFOQ11VA30gjfb4Y8tCC7JNjNw8Y0=";
41   };
43   outputs = [ "bin" "out" "dev" "man" ]
44   ++ lib.optional (externalEtc != null) "etc";
46   passthru.fetchxrd = callPackage ./fetchxrd.nix { xrootd = finalAttrs.finalPackage; };
47   passthru.tests =
48     lib.optionalAttrs stdenv.hostPlatform.isLinux {
49       test-runner = callPackage ./test-runner.nix { xrootd = finalAttrs.finalPackage; };
50     } // {
51     test-xrdcp = finalAttrs.passthru.fetchxrd {
52       pname = "xrootd-test-xrdcp";
53       # Use the the bin output hash of xrootd as version to ensure that
54       # the test gets rebuild everytime xrootd gets rebuild
55       version = finalAttrs.version + "-" + builtins.substring (builtins.stringLength builtins.storeDir + 1) 32 "${finalAttrs.finalPackage}";
56       url = "root://eospublic.cern.ch//eos/opendata/alice/2010/LHC10h/000138275/ESD/0000/AliESDs.root";
57       hash = "sha256-tIcs2oi+8u/Qr+P7AAaPTbQT+DEt26gEdc4VNerlEHY=";
58     };
59   }
60   ;
62   nativeBuildInputs = [
63     cmake
64     makeWrapper
65     pkg-config
66     removeReferencesTo
67   ];
69   buildInputs = [
70     davix
71     curl
72     libkrb5
73     libuuid
74     libxcrypt
75     libxml2
76     openssl
77     readline
78     scitokens-cpp
79     zlib
80   ]
81   ++ lib.optionals (!stdenv.isDarwin) [
82     # https://github.com/xrootd/xrootd/blob/5b5a1f6957def2816b77ec773c7e1bfb3f1cfc5b/cmake/XRootDFindLibs.cmake#L58
83     fuse
84   ]
85   ++ lib.optionals stdenv.isLinux [
86     systemd
87     voms
88   ]
89   ++ lib.optionals enableTestRunner [
90     gtest
91     cppunit
92   ];
94   preConfigure = ''
95     patchShebangs genversion.sh
96     substituteInPlace cmake/XRootDConfig.cmake.in \
97       --replace-fail "@PACKAGE_CMAKE_INSTALL_" "@CMAKE_INSTALL_FULL_"
98   '' + lib.optionalString stdenv.isDarwin ''
99     sed -i cmake/XRootDOSDefs.cmake -e '/set( MacOSX TRUE )/ainclude( GNUInstallDirs )'
100   '';
102   # https://github.com/xrootd/xrootd/blob/master/packaging/rhel/xrootd.spec.in#L665-L675=
103   postInstall = ''
104     mkdir -p "$out/lib/tmpfiles.d"
105     install -m 644 -T ../packaging/rhel/xrootd.tmpfiles "$out/lib/tmpfiles.d/xrootd.conf"
106     mkdir -p "$out/etc/xrootd"
107     install -m 644 -t "$out/etc/xrootd" ../packaging/common/*.cfg
108     install -m 644 -t "$out/etc/xrootd" ../packaging/common/client.conf
109     mkdir -p "$out/etc/xrootd/client.plugins.d"
110     install -m 644 -t "$out/etc/xrootd/client.plugins.d" ../packaging/common/client-plugin.conf.example
111     mkdir -p "$out/etc/logrotate.d"
112     install -m 644 -T ../packaging/common/xrootd.logrotate "$out/etc/logrotate.d/xrootd"
113   ''
114   # Leaving those in bin/ leads to a cyclic reference between $dev and $bin
115   # This happens since https://github.com/xrootd/xrootd/commit/fe268eb622e2192d54a4230cea54c41660bd5788
116   # So far, this xrootd-config script does not seem necessary in $bin
117   + ''
118     moveToOutput "bin/xrootd-config" "$dev"
119     moveToOutput "bin/.xrootd-config-wrapped" "$dev"
120   '' + lib.optionalString stdenv.isLinux ''
121     mkdir -p "$out/lib/systemd/system"
122     install -m 644 -t "$out/lib/systemd/system" ../packaging/common/*.service ../packaging/common/*.socket
123   '';
125   cmakeFlags = [
126     "-DXRootD_VERSION_STRING=${finalAttrs.version}"
127   ] ++ lib.optionals enableTestRunner [
128     "-DFORCE_ENABLED=TRUE"
129     "-DENABLE_DAVIX=TRUE"
130     "-DENABLE_FUSE=${if (!stdenv.isDarwin) then "TRUE" else "FALSE"}" # not supported
131     "-DENABLE_MACAROONS=OFF"
132     "-DENABLE_PYTHON=FALSE" # built separately
133     "-DENABLE_SCITOKENS=TRUE"
134     "-DENABLE_TESTS=TRUE"
135     "-DENABLE_VOMS=${if stdenv.isLinux then "TRUE" else "FALSE"}"
136   ];
138   postFixup = lib.optionalString (externalEtc != null) ''
139     moveToOutput etc "$etc"
140     ln -s ${lib.escapeShellArg externalEtc} "$out/etc"
141   '';
143   dontPatchELF = true; # shrinking rpath will cause runtime failures in dlopen
145   meta = with lib; {
146     description = "High performance, scalable fault tolerant data access";
147     homepage = "https://xrootd.slac.stanford.edu";
148     license = licenses.lgpl3Plus;
149     platforms = platforms.all;
150     maintainers = with maintainers; [ ShamrockLee ];
151   };