[29536] | 1 | package Greenstone::Package::_pacman;
|
---|
| 2 |
|
---|
| 3 | use strict;
|
---|
| 4 | use warnings;
|
---|
| 5 | use utf8;
|
---|
| 6 | use parent 'Greenstone::Package';
|
---|
| 7 | use Digest::MD5;
|
---|
| 8 |
|
---|
| 9 | sub replacement_array {
|
---|
| 10 | my $self = shift;
|
---|
| 11 | my $array = shift;
|
---|
| 12 | return join "\n", @{$array};
|
---|
| 13 | }
|
---|
| 14 |
|
---|
| 15 | sub add_md5 {
|
---|
| 16 | my $self = shift;
|
---|
| 17 | my $md5 = Digest::MD5->new;
|
---|
| 18 | for my $source (@_) {
|
---|
| 19 | open my $MD5FH, '<', "$self->{output}/$source";
|
---|
| 20 | binmode $MD5FH;
|
---|
| 21 | $md5->addfile ($MD5FH);
|
---|
| 22 | push @{$self->{config}->{SOURCE_SUMS}}, $md5->hexdigest;
|
---|
| 23 | close $MD5FH
|
---|
| 24 | }
|
---|
| 25 | }
|
---|
| 26 |
|
---|
| 27 | sub add_sources {
|
---|
| 28 | my $self = shift;
|
---|
| 29 | $self->SUPER::add_sources;
|
---|
| 30 | $self->{config}->{SOURCE_SUMS} = [];
|
---|
| 31 | $self->add_md5 (@{$self->{config}->{SOURCES}});
|
---|
| 32 | }
|
---|
| 33 |
|
---|
| 34 | sub add_makefile {
|
---|
| 35 | my $self = shift;
|
---|
| 36 | $self->SUPER::add_makefile;
|
---|
| 37 | $self->add_md5 ('Makefile');
|
---|
| 38 | }
|
---|
| 39 |
|
---|
[29546] | 40 | sub write_function {
|
---|
[29595] | 41 | my ($self, $name, $out, @lines) = @_;
|
---|
[29546] | 42 | print $out $name, "() {\n";
|
---|
| 43 | for my $line (@lines) {
|
---|
[29595] | 44 | $self->subst ($line);
|
---|
[29546] | 45 | print $out "\t", $line, "\n";
|
---|
| 46 | }
|
---|
| 47 | print $out "}\n\n";
|
---|
| 48 | }
|
---|
| 49 |
|
---|
| 50 | sub add_install {
|
---|
| 51 | my $self = shift;
|
---|
| 52 | if (exists $self->{config}->{PRE_INSTALL} or
|
---|
| 53 | exists $self->{config}->{POST_INSTALL} or
|
---|
| 54 | exists $self->{config}->{PRE_REMOVE} or
|
---|
| 55 | exists $self->{config}->{POST_REMOVE}) {
|
---|
[29612] | 56 | my $name = "$self->{config}->{NAME}.install";
|
---|
| 57 | my $file = "$self->{output}/$name";
|
---|
[29598] | 58 | print " - $file\n";
|
---|
| 59 | open my $INSTALL, '>', $file;
|
---|
[29546] | 60 | exists $self->{config}->{PRE_INSTALL} and do {
|
---|
[29595] | 61 | $self->write_function ("pre_install", $INSTALL, @{$self->{config}->{PRE_INSTALL}});
|
---|
| 62 | $self->write_function ("pre_upgrade", $INSTALL, @{$self->{config}->{PRE_INSTALL}});
|
---|
[29546] | 63 | };
|
---|
| 64 | exists $self->{config}->{POST_INSTALL} and do {
|
---|
[29595] | 65 | $self->write_function ("post_install", $INSTALL, @{$self->{config}->{POST_INSTALL}});
|
---|
| 66 | $self->write_function ("post_upgrade", $INSTALL, @{$self->{config}->{POST_INSTALL}});
|
---|
[29546] | 67 | };
|
---|
| 68 | exists $self->{config}->{PRE_REMOVE} and
|
---|
[29595] | 69 | $self->write_function ("pre_remove", $INSTALL, @{$self->{config}->{PRE_REMOVE}});
|
---|
[29546] | 70 | exists $self->{config}->{POST_REMOVE} and
|
---|
[29595] | 71 | $self->write_function ("post_remove", $INSTALL, @{$self->{config}->{POST_REMOVE}});
|
---|
[29546] | 72 | close $INSTALL;
|
---|
[29612] | 73 | return "install=$name";
|
---|
[29546] | 74 | } else {
|
---|
[29595] | 75 | return "";
|
---|
[29546] | 76 | }
|
---|
| 77 | }
|
---|
| 78 |
|
---|
[29612] | 79 | sub add_package_function {
|
---|
| 80 | my ($self, $name, $out) = @_;
|
---|
| 81 | $self->write_function ("package_$name", $out,
|
---|
| 82 | 'pkgdesc=%DESCRIPTION%',
|
---|
| 83 | 'arch=(%ARCHITECTURE%)',
|
---|
| 84 | 'depends=(',
|
---|
| 85 | '%DEPENDS%',
|
---|
| 86 | ')',
|
---|
| 87 | 'optdepends=(',
|
---|
| 88 | '%OPTDEPENDS%',
|
---|
| 89 | ')',
|
---|
| 90 | 'provides=(',
|
---|
| 91 | '%PROVIDES%',
|
---|
| 92 | ')',
|
---|
| 93 | $self->add_install,
|
---|
| 94 | "DESTDIR=\${pkgdir} make install_$name",
|
---|
| 95 | );
|
---|
| 96 |
|
---|
| 97 | }
|
---|
| 98 |
|
---|
[29595] | 99 | sub add_package_impl {
|
---|
| 100 | my ($self, $packages) = @_;
|
---|
[29612] | 101 | my $name = $self->{config}->{NAME};
|
---|
[29611] | 102 | $self->{config}->{NAMES} = $self->{config}->{NAME};
|
---|
[29595] | 103 | if (defined $packages) {
|
---|
| 104 | for my $package (@{$packages}) {
|
---|
[29612] | 105 | $self->{config}->{NAMES} .= " $name-$package->{NAME}";
|
---|
[29595] | 106 | }
|
---|
| 107 | }
|
---|
[29598] | 108 | my $file = "$self->{output}/PKGBUILD";
|
---|
| 109 | print " - $file\n";
|
---|
| 110 | open my $PKGBUILD, '>', $file;
|
---|
[29595] | 111 | for my $line (
|
---|
| 112 | '# Maintainer: %MAINTAINER_NAME% <%MAINTAINER_EMAIL%>',
|
---|
[29611] | 113 | 'pkgname=(%NAMES%)',
|
---|
[29595] | 114 | 'pkgver=%VERSION%',
|
---|
| 115 | 'pkgrel=%RELEASE%',
|
---|
| 116 | 'url=%HOMEPAGE%',
|
---|
| 117 | 'license=%LICENSE_SHORT%',
|
---|
[29611] | 118 | 'arch=(%ARCHITECTURE%)',
|
---|
[29595] | 119 | 'makedepends=(',
|
---|
| 120 | '%MAKEDEPENDS%',
|
---|
| 121 | ')',
|
---|
| 122 | 'source=(',
|
---|
| 123 | '%SOURCES%',
|
---|
| 124 | ')',
|
---|
| 125 | 'md5sums=(',
|
---|
| 126 | '%SOURCE_SUMS%',
|
---|
| 127 | ')',
|
---|
| 128 | 'build() {',
|
---|
| 129 | ' cd ${srcdir}',
|
---|
| 130 | ' make build',
|
---|
| 131 | '}'
|
---|
| 132 | ) {
|
---|
| 133 | my $copy = $line;
|
---|
| 134 | $self->subst ($copy);
|
---|
| 135 | print $PKGBUILD $copy, "\n";
|
---|
| 136 | }
|
---|
| 137 | if (defined $packages) {
|
---|
[29611] | 138 | # main package
|
---|
[29612] | 139 | $self->add_package_function ("$self->{config}->{NAME}", $PKGBUILD);
|
---|
[29595] | 140 | my $config = $self->{config};
|
---|
[29611] | 141 | # subpackages
|
---|
[29595] | 142 | for my $package (@{$packages}) {
|
---|
| 143 | $self->{config} = $package;
|
---|
[29612] | 144 | $self->add_package_function ("$name-$package->{NAME}", $PKGBUILD);
|
---|
[29595] | 145 | }
|
---|
| 146 | $self->{config} = $config;
|
---|
| 147 | } else {
|
---|
[29612] | 148 | for my $line (
|
---|
| 149 | 'arch=(%ARCHITECTURE%)',
|
---|
| 150 | 'depends=(',
|
---|
| 151 | '%DEPENDS%',
|
---|
| 152 | ')',
|
---|
| 153 | 'optdepends=(',
|
---|
| 154 | '%OPTDEPENDS%',
|
---|
| 155 | ')',
|
---|
| 156 | 'provides=(',
|
---|
| 157 | '%PROVIDES%',
|
---|
| 158 | ')',
|
---|
| 159 | ) {
|
---|
| 160 | my $copy = $line;
|
---|
| 161 | $self->subst ($copy);
|
---|
| 162 | print $PKGBUILD $copy, "\n";
|
---|
| 163 | }
|
---|
[29595] | 164 | print $PKGBUILD $self->add_install, "\n";
|
---|
| 165 | $self->write_function ('package', $PKGBUILD, 'DESTDIR=${pkgdir} make install');
|
---|
| 166 | }
|
---|
| 167 | close $PKGBUILD;
|
---|
| 168 | }
|
---|
| 169 |
|
---|
[29536] | 170 | 1;
|
---|