1{ stdenv, fetchurl, pythonPackages, gettext
2, setools, libsepol, libselinux, libcap_ng, libsemanage, sepolgen
3}:
4
5stdenv.mkDerivation rec {
6 name = "policycoreutils-${version}";
7 version = "2.4";
8 inherit (libsepol) se_release se_url;
9
10 src = fetchurl {
11 url = "${se_url}/${se_release}/policycoreutils-${version}.tar.gz";
12 sha256 = "0y9l9k60iy21hj0lcvfdfxs1fxydg6d3pxp9rhy7hwr4y5vgh6dq";
13 };
14
15 patches = [ ./fix-printf-type.patch ];
16
17 postPatch = ''
18 # Fix references to libsepol.a
19 find . -name Makefile -exec sed -i 's,[^ ]*/libsepol.a,${libsepol}/lib/libsepol.a,g' {} \;
20
21 # Fix install references
22 substituteInPlace po/Makefile --replace /usr/bin/install install
23
24 # Fix references to /usr/share
25 grep -r '/usr/share' | awk -F: '{print $1}' | xargs sed -i "s,\(\$(DESTDIR)\)*/usr/share,$out/share,g"
26
27 # Fix sepolicy install
28 sed -i "s,\(setup.py install\).*,\1 --prefix=$out,g" sepolicy/Makefile
29
30 # Fix setuid install
31 sed -i 's|-m 4755|-m 755|' sandbox/Makefile
32 '';
33
34 nativeBuildInputs = [ pythonPackages.python gettext ];
35 buildInputs = [ setools libsepol libselinux libcap_ng libsemanage ];
36 pythonPath = [ libselinux sepolgen ];
37
38 preBuild = ''
39 makeFlagsArray+=("PREFIX=$out")
40 makeFlagsArray+=("DESTDIR=$out")
41 '';
42
43 # Creation of the system-config-selinux directory is broken
44 preInstall = ''
45 mkdir -p $out/share/system-config-selinux
46 '';
47
48 # Fix the python scripts to include paths to libraries
49 # NOTE: We are not using wrapPythonPrograms or makeWrapper as these scripts
50 # purge the environment as a security measure
51 postInstall = ''
52 grep -r '#!.*python' $out/bin | awk -F: '{print $1}' | xargs sed -i "1a \
53 import sys; \
54 sys.path.append('$(toPythonPath "$out")'); \
55 ${stdenv.lib.flip stdenv.lib.concatMapStrings pythonPath (lib: ''
56 sys.path.append('$(toPythonPath "${lib}")'); \
57 '')}"
58 '';
59
60 NIX_CFLAGS_COMPILE = "-fstack-protector-all";
61
62 meta = with stdenv.lib; {
63 description = "SELinux policy core utilities";
64 license = licenses.gpl2;
65 inherit (libsepol.meta) homepage platforms maintainers;
66 };
67}
68