I'm trying to use nix-generate-from-cspan to install sqitch
From nix-generate-from-cpan App::Sqitch DBD::Pg
, I made this file:
{buildPerlModule, fetchurl}:
buildPerlModule rec {
name = "App-Sqitch-0.9995";
src = fetchurl {
url = "mirror://cpan/authors/id/D/DW/DWHEELER/${name}.tar.gz";
sha256 = "c29b4610ce43bd43ecfa39188f4cbb00b38c390136fcdd9984142efd99eba292";
};
buildInputs = [ CaptureTiny ModuleBuild TestDeep TestDir TestException TestFile TestFileContents TestMockModule TestNoWarnings ];
propagatedBuildInputs = [ Clone ConfigGitLike DBI DateTime DateTimeTimeZone DevelStackTrace EncodeLocale FileHomeDir HashMerge IOPager IPCRun3 IPCSystemSimple ListMoreUtils Moo PathClass PerlIOutf8_strict StringFormatter StringShellQuote SubExporter TemplateTiny Throwable TryTiny TypeTiny URI URIdb libintlperl namespaceautoclean self."if" ];
meta = {
homepage = http://sqitch.org/;
description = "Sane database change management";
license = stdenv.lib.licenses.mit;
};
}
but running nix-build -E 'with import <nixpkgs> { }; callPackage ./sqitch.nix'
gives this error:
expression does not evaluate to a derivation (or a set or list of those)
To debug, I tried nix-instantiate --eval --expr 'with import <nixpkgs> { }; callPackage ./sqitch.nix'
which gives:
<LAMBDA>
So I tried nix-build -E 'with import <nixpkgs> { }; callPackage callPackage ./sqitch.nix'
but it still gives the same error, and nix-instantiate --eval --expr 'with import <nixpkgs> { }; callPackage callPackage ./sqitch.nix'
gives:
{ __functor = <CODE>; override = <CODE>; overrideDerivation = <CODE>; }
which does not help me much.
the result of buildPerlModule
is meant to be used as src
in mkDerivation
params.
It turns out sqitch
is already part of nixpkgs, and it is defined like this:
{ name, stdenv, perl, makeWrapper, sqitchModule, databaseModule }:
stdenv.mkDerivation {
name = "${name}-${sqitchModule.version}";
buildInputs = [ perl makeWrapper sqitchModule databaseModule ];
src = sqitchModule;
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
for d in bin/sqitch etc lib share ; do
ln -s ${sqitchModule}/$d $out/$d
done
'';
dontStrip = true;
postFixup = "wrapProgram $out/bin/sqitch --prefix PERL5LIB : $PERL5LIB";
meta = {
platforms = stdenv.lib.platforms.unix;
};
}
sqitchPg = callPackage ../development/tools/misc/sqitch {
name = "sqitch-pg";
databaseModule = perlPackages.DBDPg;
sqitchModule = perlPackages.AppSqitch;
};
https://github.com/NixOS/nixpkgs/blob/56904d7c423f2b13b37fbd29f39bbb4b52bc7824/pkgs/top-level/perl-packages.nix#L281-L305 (which is the output of nix-generate-from-cpan App::Sqitch
)
AppSqitch = buildPerlModule rec {
version = "0.9994";
name = "App-Sqitch-${version}";
src = fetchurl {
url = "mirror://cpan/authors/id/D/DW/DWHEELER/${name}.tar.gz";
sha256 = "0in602z40s50fdlmws4g0a1pb8p7yn0wx8jgsacz26a4i1q7gpi4";
};
buildInputs = [
CaptureTiny PathClass TestDeep TestDir TestException
TestFile TestFileContents TestMockModule TestNoWarnings
];
propagatedBuildInputs = [
Clone ConfigGitLike DBI DateTime
DevelStackTrace EncodeLocale FileHomeDir HashMerge IOPager IPCRun3
IPCSystemSimple ListMoreUtils Moo PathClass PerlIOutf8_strict StringFormatter
StringShellQuote SubExporter TemplateTiny Throwable TryTiny TypeTiny URI
URIdb libintlperl namespaceautoclean
];
doCheck = false; # Can't find home directory.
meta = {
homepage = http://sqitch.org/;
description = "Sane database change management";
license = stdenv.lib.licenses.mit;
};
};
DBDPg = import ../development/perl-modules/DBD-Pg {
inherit stdenv fetchurl buildPerlPackage DBI;
inherit (pkgs) postgresql;
};
https://github.com/NixOS/nixpkgs/blob/56904d7c423f2b13b37fbd29f39bbb4b52bc7824/pkgs/development/perl-modules/DBD-Pg/default.nix (which looks like the output of nix-generate-from-cpan DBD::Pg
, but not exactly)
{ stdenv, fetchurl, buildPerlPackage, DBI, postgresql }:
buildPerlPackage rec {
name = "DBD-Pg-3.5.3";
src = fetchurl {
url = "mirror://cpan/authors/id/T/TU/TURNSTEP/${name}.tar.gz";
sha256 = "03m9w1cd0yyrbqwkwcl92j1cpmasmm69f3hwvcrlfsi5fnwsk63y";
};
buildInputs = [ postgresql ];
propagatedBuildInputs = [ DBI ];
makeMakerFlags = "POSTGRES_HOME=${postgresql}";
meta = {
homepage = http://search.cpan.org/dist/DBD-Pg/;
description = "DBI PostgreSQL interface";
license = with stdenv.lib.licenses; [ artistic1 gpl1Plus ];
platforms = stdenv.lib.platforms.unix;
};
}
So that's how it is meant to be used.
NB : as I just noted in the comments of my question, I also forgot to add {}
after my callPackage
s, which explains the weird types I was getting.