1 | package Greenstone::Package::_apt;
|
---|
2 |
|
---|
3 | use strict;
|
---|
4 | use warnings;
|
---|
5 | use utf8;
|
---|
6 | use parent 'Greenstone::Package';
|
---|
7 |
|
---|
8 | # Deb packages expect lists to be comma separated
|
---|
9 | sub replacement_array {
|
---|
10 | my $self = shift;
|
---|
11 | my $array = shift;
|
---|
12 | return join ", ", @{$array};
|
---|
13 | }
|
---|
14 |
|
---|
15 | sub write_function {
|
---|
16 | my ($self, $name, @lines) = @_;
|
---|
17 | my $file = "$self->{output}/debian/$name";
|
---|
18 | print " - $file\n";
|
---|
19 | open my $OUT, '>', $file
|
---|
20 | or die "Failed to open $file: $!";
|
---|
21 | for my $line (@lines) {
|
---|
22 | print $OUT $line, "\n";
|
---|
23 | }
|
---|
24 | close $OUT;
|
---|
25 | chmod 0755, $file;
|
---|
26 | }
|
---|
27 |
|
---|
28 | # Add pre/post install/remove hooks
|
---|
29 | sub add_install {
|
---|
30 | my ($self, $name) = @_;
|
---|
31 | my $prefix = (defined $name ? "$name." : "");
|
---|
32 | exists $self->{config}->{PRE_INSTALL} and
|
---|
33 | $self->write_function ("${prefix}preinst", @{$self->{config}->{PRE_INSTALL}});
|
---|
34 | exists $self->{config}->{POST_INSTALL} and
|
---|
35 | $self->write_function ("${prefix}postinst", @{$self->{config}->{POST_INSTALL}});
|
---|
36 | exists $self->{config}->{PRE_REMOVE} and
|
---|
37 | $self->write_function ("${prefix}prerm", @{$self->{config}->{PRE_REMOVE}});
|
---|
38 | exists $self->{config}->{POST_REMOVE} and
|
---|
39 | $self->write_function ("${prefix}postrm", @{$self->{config}->{POST_REMOVE}});
|
---|
40 | }
|
---|
41 |
|
---|
42 | # Adds a definition for a package or subpackage
|
---|
43 | sub add_package_section {
|
---|
44 | my ($self, $out) = @_;
|
---|
45 | for my $line (
|
---|
46 | 'Package: %NAME%',
|
---|
47 | 'Architecture: %ARCHITECTURE%',
|
---|
48 | 'Homepage: %HOMEPAGE%',
|
---|
49 | 'Depends: %DEPENDS%',
|
---|
50 | 'Description: %DESCRIPTION_SHORT%',
|
---|
51 | ' %DESCRIPTION%',
|
---|
52 | ''
|
---|
53 | ) {
|
---|
54 | my $copy = $line;
|
---|
55 | $self->subst ($copy);
|
---|
56 | print $out $copy, "\n";
|
---|
57 | }
|
---|
58 | }
|
---|
59 |
|
---|
60 | # Handles the apt-specific package generation
|
---|
61 | sub add_package_impl {
|
---|
62 | my ($self, $packages) = @_;
|
---|
63 | my $file = "$self->{output}/debian/control";
|
---|
64 | print " - $file\n";
|
---|
65 | open my $CONTROL, '>', $file
|
---|
66 | or die "Failed to open $file: $!";
|
---|
67 | for my $line (
|
---|
68 | 'Source: %NAME%',
|
---|
69 | 'Section: java',
|
---|
70 | 'Priority: optional',
|
---|
71 | 'Maintainer: %MAINTAINER_NAME% <%MAINTAINER_EMAIL%>',
|
---|
72 | 'Build-Depends: %MAKEDEPENDS%',
|
---|
73 | ''
|
---|
74 | ) {
|
---|
75 | my $copy = $line;
|
---|
76 | $self->subst ($copy);
|
---|
77 | print $CONTROL $copy, "\n";
|
---|
78 | }
|
---|
79 | if (defined $packages) {
|
---|
80 | my $config = $self->{config};
|
---|
81 | my @names;
|
---|
82 | for my $package (@{$packages}) {
|
---|
83 | push @names, $package->{NAME};
|
---|
84 | $package->{HOMEPAGE} = $config->{HOMEPAGE};
|
---|
85 | $self->{config} = $package;
|
---|
86 | $self->add_install ($package->{NAME});
|
---|
87 | $self->add_package_section ($CONTROL);
|
---|
88 | my $install = "$self->{output}/debian/$self->{config}->{NAME}.install";
|
---|
89 | open my $INSTALL, '>', $install;
|
---|
90 | for my $line (@{$self->{config}->{FILES}}) {
|
---|
91 | print $INSTALL $line, "\n";
|
---|
92 | }
|
---|
93 | close $INSTALL;
|
---|
94 | }
|
---|
95 | $self->{config} = $config;
|
---|
96 | my $rules = "$self->{output}/debian/rules";
|
---|
97 | open my $RULES, '>>', $rules
|
---|
98 | or die "Failed to open $rules: $!";
|
---|
99 | print $RULES "\noverride_dh_gencontrol:\n";
|
---|
100 | for my $name (@names) {
|
---|
101 | print $RULES "\tdh_gencontrol -p$name\n";
|
---|
102 | }
|
---|
103 | close $RULES;
|
---|
104 | } else {
|
---|
105 | $self->add_install;
|
---|
106 | $self->add_package_section ($CONTROL);
|
---|
107 | }
|
---|
108 | close $CONTROL;
|
---|
109 | }
|
---|
110 |
|
---|
111 | 1;
|
---|