source: main/trunk/package-kits/linux/perllib/Greenstone/Package/_pacman.pm

Last change on this file was 29612, checked in by Jeremy Symon, 9 years ago

Got Pacman working (again)

File size: 4.7 KB
Line 
1package Greenstone::Package::_pacman;
2
3use strict;
4use warnings;
5use utf8;
6use parent 'Greenstone::Package';
7use Digest::MD5;
8
9sub replacement_array {
10 my $self = shift;
11 my $array = shift;
12 return join "\n", @{$array};
13}
14
15sub 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
27sub 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
34sub add_makefile {
35 my $self = shift;
36 $self->SUPER::add_makefile;
37 $self->add_md5 ('Makefile');
38}
39
40sub write_function {
41 my ($self, $name, $out, @lines) = @_;
42 print $out $name, "() {\n";
43 for my $line (@lines) {
44 $self->subst ($line);
45 print $out "\t", $line, "\n";
46 }
47 print $out "}\n\n";
48}
49
50sub 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}) {
56 my $name = "$self->{config}->{NAME}.install";
57 my $file = "$self->{output}/$name";
58 print " - $file\n";
59 open my $INSTALL, '>', $file;
60 exists $self->{config}->{PRE_INSTALL} and do {
61 $self->write_function ("pre_install", $INSTALL, @{$self->{config}->{PRE_INSTALL}});
62 $self->write_function ("pre_upgrade", $INSTALL, @{$self->{config}->{PRE_INSTALL}});
63 };
64 exists $self->{config}->{POST_INSTALL} and do {
65 $self->write_function ("post_install", $INSTALL, @{$self->{config}->{POST_INSTALL}});
66 $self->write_function ("post_upgrade", $INSTALL, @{$self->{config}->{POST_INSTALL}});
67 };
68 exists $self->{config}->{PRE_REMOVE} and
69 $self->write_function ("pre_remove", $INSTALL, @{$self->{config}->{PRE_REMOVE}});
70 exists $self->{config}->{POST_REMOVE} and
71 $self->write_function ("post_remove", $INSTALL, @{$self->{config}->{POST_REMOVE}});
72 close $INSTALL;
73 return "install=$name";
74 } else {
75 return "";
76 }
77}
78
79sub 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
99sub add_package_impl {
100 my ($self, $packages) = @_;
101 my $name = $self->{config}->{NAME};
102 $self->{config}->{NAMES} = $self->{config}->{NAME};
103 if (defined $packages) {
104 for my $package (@{$packages}) {
105 $self->{config}->{NAMES} .= " $name-$package->{NAME}";
106 }
107 }
108 my $file = "$self->{output}/PKGBUILD";
109 print " - $file\n";
110 open my $PKGBUILD, '>', $file;
111 for my $line (
112 '# Maintainer: %MAINTAINER_NAME% <%MAINTAINER_EMAIL%>',
113 'pkgname=(%NAMES%)',
114 'pkgver=%VERSION%',
115 'pkgrel=%RELEASE%',
116 'url=%HOMEPAGE%',
117 'license=%LICENSE_SHORT%',
118 'arch=(%ARCHITECTURE%)',
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) {
138 # main package
139 $self->add_package_function ("$self->{config}->{NAME}", $PKGBUILD);
140 my $config = $self->{config};
141 # subpackages
142 for my $package (@{$packages}) {
143 $self->{config} = $package;
144 $self->add_package_function ("$name-$package->{NAME}", $PKGBUILD);
145 }
146 $self->{config} = $config;
147 } else {
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 }
164 print $PKGBUILD $self->add_install, "\n";
165 $self->write_function ('package', $PKGBUILD, 'DESTDIR=${pkgdir} make install');
166 }
167 close $PKGBUILD;
168}
169
1701;
Note: See TracBrowser for help on using the repository browser.