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