make-derivation: use pname-version as default name if both are present

This commit is contained in:
Patrick Hilhorst 2018-06-06 22:04:35 +02:00
parent 48caae5045
commit 320c9c10de
No known key found for this signature in database
GPG key ID: 589BB0A8DAFEF2B2
2 changed files with 33 additions and 2 deletions

View file

@ -236,6 +236,26 @@ rec {
in lenContent >= lenSuffix &&
substring (lenContent - lenSuffix) lenContent content == suffix;
/* Determine whether a string contains the given infix
Type: hasInfix :: string -> string -> bool
Example:
hasInfix "bc" "abcd"
=> true
hasInfix "ab" "abcd"
=> true
hasInfix "cd" "abcd"
=> true
hasInfix "foo" "abcd"
=> false
*/
hasInfix = infix: content:
let
drop = x: substring 1 (stringLength x) x;
in hasPrefix infix content
|| content != "" && hasInfix infix (drop content);
/* Convert a string to a list of characters (i.e. singleton strings).
This allows you to, e.g., map a function over each character. However,
note that this will likely be horribly inefficient; Nix is not a

View file

@ -65,6 +65,8 @@ rec {
, pos ? # position used in error messages and for meta.position
(if attrs.meta.description or null != null
then builtins.unsafeGetAttrPos "description" attrs.meta
else if attrs.version or null != null
then builtins.unsafeGetAttrPos "version" attrs
else builtins.unsafeGetAttrPos "name" attrs)
, separateDebugInfo ? false
, outputs ? [ "out" ]
@ -79,6 +81,15 @@ rec {
, ... } @ attrs:
let
# Check that the name is consistent with pname and version:
selfConsistent = (with attrs; attrs ? "name" ->
(lib.assertMsg (attrs ? "version" -> lib.strings.hasInfix version name)
"version ${version} does not appear in name ${name}" &&
lib.assertMsg (attrs ? "pname" -> lib.strings.hasInfix pname name)
"pname ${pname} does not appear in name ${name}"));
computedName = if name != "" then name else "${attrs.pname}-${attrs.version}";
# TODO(@oxij, @Ericson2314): This is here to keep the old semantics, remove when
# no package has `doCheck = true`.
doCheck' = doCheck && stdenv.hostPlatform == stdenv.buildPlatform;
@ -175,7 +186,7 @@ rec {
// {
# A hack to make `nix-env -qa` and `nix search` ignore broken packages.
# TODO(@oxij): remove this assert when something like NixOS/nix#1771 gets merged into nix.
name = assert validity.handled && (separateDebugInfo -> stdenv.hostPlatform.isLinux); name + lib.optionalString
name = assert selfConsistent && validity.handled && (separateDebugInfo -> stdenv.hostPlatform.isLinux); computedName + lib.optionalString
# Fixed-output derivations like source tarballs shouldn't get a host
# suffix. But we have some weird ones with run-time deps that are
# just used for their side-affects. Those might as well since the
@ -287,7 +298,7 @@ rec {
meta = {
# `name` above includes cross-compilation cruft (and is under assert),
# lets have a clean always accessible version here.
inherit name;
name = computedName;
# If the packager hasn't specified `outputsToInstall`, choose a default,
# which is the name of `p.bin or p.out or p`;