biglybt: 3.5.0.0 -> 3.6.0.0
[NixPkgs.git] / pkgs / development / skaware-packages / build-skaware-package.nix
blob56bbe6bec51b3241cd7a27a5306cf15158a79438
1 { lib, stdenv, cleanPackaging, fetchurl }:
3   # : string
4   pname
5   # : string
6 , version
7   # : string
8 , sha256 ? lib.fakeSha256
9   # : drv | null
10 , manpages ? null
11   # : string
12 , description
13   # : list Platform
14 , platforms ? lib.platforms.all
15   # : list string
16 , outputs ? [ "bin" "lib" "dev" "doc" "out" ]
17   # TODO(Profpatsch): automatically infer most of these
18   # : list string
19 , configureFlags
20   # : string
21 , postConfigure ? null
22   # mostly for moving and deleting files from the build directory
23   # : lines
24 , postInstall
25   # : list Maintainer
26 , maintainers ? [ ]
27   # : passthru arguments (e.g. tests)
28 , passthru ? { }
32 let
34   # File globs that can always be deleted
35   commonNoiseFiles = [
36     ".gitignore"
37     "Makefile"
38     "INSTALL"
39     "configure"
40     "patch-for-solaris"
41     "src/**/*"
42     "tools/**/*"
43     "package/**/*"
44     "config.mak"
45   ];
47   # File globs that should be moved to $doc
48   commonMetaFiles = [
49     "COPYING"
50     "AUTHORS"
51     "NEWS"
52     "CHANGELOG"
53     "README"
54     "README.*"
55     "DCO"
56     "CONTRIBUTING"
57   ];
60 stdenv.mkDerivation {
61   inherit pname version;
63   src = fetchurl {
64     url = "https://skarnet.org/software/${pname}/${pname}-${version}.tar.gz";
65     inherit sha256;
66   };
68   outputs =
69     if manpages == null
70     then outputs
71     else
72     assert (lib.assertMsg (!lib.elem "man" outputs) "If you pass `manpages` to `skawarePackages.buildPackage`, you cannot have a `man` output already!");
73     # insert as early as posible, but keep the first element
74     if lib.length outputs > 0
75     then [(lib.head outputs) "man"] ++ lib.tail outputs
76     else ["man"];
78   dontDisableStatic = true;
79   enableParallelBuilding = true;
81   configureFlags = configureFlags ++ [
82     "--enable-absolute-paths"
83     # We assume every nix-based cross target has urandom.
84     # This might not hold for e.g. BSD.
85     "--with-sysdep-devurandom=yes"
86     (if stdenv.isDarwin
87     then "--disable-shared"
88     else "--enable-shared")
89   ]
90     # On darwin, the target triplet from -dumpmachine includes version number,
91     # but skarnet.org software uses the triplet to test binary compatibility.
92     # Explicitly setting target ensures code can be compiled against a skalibs
93     # binary built on a different version of darwin.
94     # http://www.skarnet.org/cgi-bin/archive.cgi?1:mss:623:heiodchokfjdkonfhdph
95     ++ (lib.optional stdenv.isDarwin
96     "--build=${stdenv.hostPlatform.system}");
98   inherit postConfigure;
100   makeFlags = lib.optionals stdenv.cc.isClang [ "AR=${stdenv.cc.targetPrefix}ar" "RANLIB=${stdenv.cc.targetPrefix}ranlib" ];
102   # TODO(Profpatsch): ensure that there is always a $doc output!
103   postInstall = ''
104     echo "Cleaning & moving common files"
105     ${cleanPackaging.commonFileActions {
106        noiseFiles = commonNoiseFiles;
107        docFiles = commonMetaFiles;
108      }} $doc/share/doc/${pname}
110     ${if manpages == null
111       then ''echo "no manpages for this package"''
112       else ''
113         echo "copying manpages"
114         cp -vr ${manpages} $man
115       ''}
117     ${postInstall}
118   '';
120   postFixup = ''
121     ${cleanPackaging.checkForRemainingFiles}
122   '';
124   passthru = passthru // (if manpages == null then {} else { inherit manpages; });
126   meta = {
127     homepage = "https://skarnet.org/software/${pname}/";
128     inherit description platforms;
129     license = lib.licenses.isc;
130     maintainers = with lib.maintainers;
131       [ pmahoney Profpatsch qyliss ] ++ maintainers;
132   };