7cadc17591
For a while now, we’ve had these separate derivations for the skaware manpages. That was fine in the beginning, because it was not entirely clear whether the manpage project would be long-lived. Given that the collection of third-party manpages is now extensive and updated regularly, plus it is sanctioned by skarnet, we can remove this additional hurdle to using skaware. The buildManPage structure is kept, instead of building them in a separate `default.nix`, we add a field `manpages` to `skawarePackages.buildPackage`, which adds the `"man"` output and copies everything from the manpages output. For backwards-compat, the manpage derivation is exposed in the `passthru` and referenced by the `*-man-pages` attributes. ~~~ The `with skawarePackages;` scope is removed from all packages, and used explicitly for all functions, while packages get added to the package import header.
134 lines
3.3 KiB
Nix
134 lines
3.3 KiB
Nix
{ lib, stdenv, cleanPackaging, fetchurl }:
|
|
{
|
|
# : string
|
|
pname
|
|
# : string
|
|
, version
|
|
# : string
|
|
, sha256 ? lib.fakeSha256
|
|
# : drv | null
|
|
, manpages ? null
|
|
# : string
|
|
, description
|
|
# : list Platform
|
|
, platforms ? lib.platforms.all
|
|
# : list string
|
|
, outputs ? [ "bin" "lib" "dev" "doc" "out" ]
|
|
# TODO(Profpatsch): automatically infer most of these
|
|
# : list string
|
|
, configureFlags
|
|
# : string
|
|
, postConfigure ? null
|
|
# mostly for moving and deleting files from the build directory
|
|
# : lines
|
|
, postInstall
|
|
# : list Maintainer
|
|
, maintainers ? [ ]
|
|
# : passthru arguments (e.g. tests)
|
|
, passthru ? { }
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
# File globs that can always be deleted
|
|
commonNoiseFiles = [
|
|
".gitignore"
|
|
"Makefile"
|
|
"INSTALL"
|
|
"configure"
|
|
"patch-for-solaris"
|
|
"src/**/*"
|
|
"tools/**/*"
|
|
"package/**/*"
|
|
"config.mak"
|
|
];
|
|
|
|
# File globs that should be moved to $doc
|
|
commonMetaFiles = [
|
|
"COPYING"
|
|
"AUTHORS"
|
|
"NEWS"
|
|
"CHANGELOG"
|
|
"README"
|
|
"README.*"
|
|
"DCO"
|
|
"CONTRIBUTING"
|
|
];
|
|
|
|
in
|
|
stdenv.mkDerivation {
|
|
inherit pname version;
|
|
|
|
src = fetchurl {
|
|
url = "https://skarnet.org/software/${pname}/${pname}-${version}.tar.gz";
|
|
inherit sha256;
|
|
};
|
|
|
|
outputs =
|
|
if manpages == null
|
|
then outputs
|
|
else
|
|
assert (lib.assertMsg (!lib.elem "man" outputs) "If you pass `manpages` to `skawarePackages.buildPackage`, you cannot have a `man` output already!");
|
|
# insert as early as posible, but keep the first element
|
|
if lib.length outputs > 0
|
|
then [(lib.head outputs) "man"] ++ lib.tail outputs
|
|
else ["man"];
|
|
|
|
dontDisableStatic = true;
|
|
enableParallelBuilding = true;
|
|
|
|
configureFlags = configureFlags ++ [
|
|
"--enable-absolute-paths"
|
|
# We assume every nix-based cross target has urandom.
|
|
# This might not hold for e.g. BSD.
|
|
"--with-sysdep-devurandom=yes"
|
|
(if stdenv.isDarwin
|
|
then "--disable-shared"
|
|
else "--enable-shared")
|
|
]
|
|
# On darwin, the target triplet from -dumpmachine includes version number,
|
|
# but skarnet.org software uses the triplet to test binary compatibility.
|
|
# Explicitly setting target ensures code can be compiled against a skalibs
|
|
# binary built on a different version of darwin.
|
|
# http://www.skarnet.org/cgi-bin/archive.cgi?1:mss:623:heiodchokfjdkonfhdph
|
|
++ (lib.optional stdenv.isDarwin
|
|
"--build=${stdenv.hostPlatform.system}");
|
|
|
|
inherit postConfigure;
|
|
|
|
makeFlags = lib.optionals stdenv.cc.isClang [ "AR=${stdenv.cc.targetPrefix}ar" "RANLIB=${stdenv.cc.targetPrefix}ranlib" ];
|
|
|
|
# TODO(Profpatsch): ensure that there is always a $doc output!
|
|
postInstall = ''
|
|
echo "Cleaning & moving common files"
|
|
${cleanPackaging.commonFileActions {
|
|
noiseFiles = commonNoiseFiles;
|
|
docFiles = commonMetaFiles;
|
|
}} $doc/share/doc/${pname}
|
|
|
|
${if manpages == null
|
|
then ''echo "no manpages for this package"''
|
|
else ''
|
|
echo "copying manpages"
|
|
cp -vr ${manpages} $man
|
|
''}
|
|
|
|
${postInstall}
|
|
'';
|
|
|
|
postFixup = ''
|
|
${cleanPackaging.checkForRemainingFiles}
|
|
'';
|
|
|
|
passthru = passthru // (if manpages == null then {} else { inherit manpages; });
|
|
|
|
meta = {
|
|
homepage = "https://skarnet.org/software/${pname}/";
|
|
inherit description platforms;
|
|
license = lib.licenses.isc;
|
|
maintainers = with lib.maintainers;
|
|
[ pmahoney Profpatsch qyliss ] ++ maintainers;
|
|
};
|
|
|
|
}
|