1{
2 lib,
3 fetchFromGitHub,
4 buildPerlPackage,
5 shortenPerlShebang,
6 DBDmysql,
7 DBI,
8 IOSocketSSL,
9 TermReadKey,
10 go,
11 buildGoModule,
12 git,
13}:
14
15let
16 version = "3.7.0";
17
18 src = fetchFromGitHub {
19 owner = "percona";
20 repo = "percona-toolkit";
21 rev = "v${version}";
22 sha256 = "sha256-fJGeL9XZHTFmpns5CE7It35HRnF3JiC6muOpOS1zboI=";
23
24 # needed for build script
25 leaveDotGit = true;
26 };
27
28 goDeps =
29 (buildGoModule {
30 pname = "Percona-Toolkit go-bindings";
31 inherit src version;
32
33 vendorHash = "sha256-HAaoVYK6av085zSG0ZRpbmUgEA2UEt7CGWF/834e+z4=";
34 }).goModules;
35in
36buildPerlPackage {
37 pname = "Percona-Toolkit";
38
39 inherit src version;
40
41 outputs = [ "out" ];
42
43 nativeBuildInputs = [
44 git
45 shortenPerlShebang
46 ];
47
48 buildInputs = [
49 DBDmysql
50 go
51 DBI
52 IOSocketSSL
53 TermReadKey
54 ];
55
56 postPatch = ''
57 cp -r --reflink=auto ${goDeps} vendor
58 chmod -R u+rw vendor
59 substituteInPlace src/go/Makefile \
60 --replace-fail "go get ./..." "echo 'Skipping go get due to offline build'"
61 '';
62
63 preBuild = ''
64 export HOME=$TMPDIR
65 '';
66
67 postInstall = ''
68 shortenPerlShebang $(grep -l "/bin/env perl" $out/bin/*)
69 '';
70
71 meta = {
72 description = "Collection of advanced command-line tools to perform a variety of MySQL and system tasks";
73 homepage = "https://www.percona.com/software/database-tools/percona-toolkit";
74 changelog = "https://docs.percona.com/percona-toolkit/release_notes.html";
75 license = with lib.licenses; [ gpl2Only ];
76 maintainers = with lib.maintainers; [ izorkin ];
77 };
78}