| OLD | NEW |
| (Empty) |
| 1 # Copyright © 2008 Raphaël Hertzog <hertzog@debian.org> | |
| 2 # | |
| 3 # This program is free software; you can redistribute it and/or modify | |
| 4 # it under the terms of the GNU General Public License as published by | |
| 5 # the Free Software Foundation; either version 2 of the License, or | |
| 6 # (at your option) any later version. | |
| 7 # | |
| 8 # This program is distributed in the hope that it will be useful, | |
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 11 # GNU General Public License for more details. | |
| 12 # | |
| 13 # You should have received a copy of the GNU General Public License | |
| 14 # along with this program. If not, see <https://www.gnu.org/licenses/>. | |
| 15 | |
| 16 package Dpkg::Source::Package::V3::Native; | |
| 17 | |
| 18 use strict; | |
| 19 use warnings; | |
| 20 | |
| 21 our $VERSION = '0.01'; | |
| 22 | |
| 23 use parent qw(Dpkg::Source::Package); | |
| 24 | |
| 25 use Dpkg; | |
| 26 use Dpkg::Gettext; | |
| 27 use Dpkg::ErrorHandling; | |
| 28 use Dpkg::Compression; | |
| 29 use Dpkg::Exit qw(push_exit_handler pop_exit_handler); | |
| 30 use Dpkg::Version; | |
| 31 use Dpkg::Source::Archive; | |
| 32 use Dpkg::Source::Functions qw(erasedir); | |
| 33 | |
| 34 use Cwd; | |
| 35 use File::Basename; | |
| 36 use File::Temp qw(tempfile); | |
| 37 | |
| 38 our $CURRENT_MINOR_VERSION = '0'; | |
| 39 | |
| 40 sub do_extract { | |
| 41 my ($self, $newdirectory) = @_; | |
| 42 my $sourcestyle = $self->{options}{sourcestyle}; | |
| 43 my $fields = $self->{fields}; | |
| 44 | |
| 45 my $dscdir = $self->{basedir}; | |
| 46 my $basename = $self->get_basename(); | |
| 47 my $basenamerev = $self->get_basename(1); | |
| 48 | |
| 49 my $tarfile; | |
| 50 my $comp_ext_regex = compression_get_file_extension_regex(); | |
| 51 foreach my $file ($self->get_files()) { | |
| 52 if ($file =~ /^\Q$basenamerev\E\.tar\.$comp_ext_regex$/) { | |
| 53 error(_g('multiple tarfiles in v1.0 source package')) if $tarfile; | |
| 54 $tarfile = $file; | |
| 55 } else { | |
| 56 error(_g('unrecognized file for a native source package: %s'), $file
); | |
| 57 } | |
| 58 } | |
| 59 | |
| 60 error(_g('no tarfile in Files field')) unless $tarfile; | |
| 61 | |
| 62 erasedir($newdirectory); | |
| 63 info(_g('unpacking %s'), $tarfile); | |
| 64 my $tar = Dpkg::Source::Archive->new(filename => "$dscdir$tarfile"); | |
| 65 $tar->extract($newdirectory); | |
| 66 } | |
| 67 | |
| 68 sub can_build { | |
| 69 my ($self, $dir) = @_; | |
| 70 | |
| 71 my $v = Dpkg::Version->new($self->{fields}->{'Version'}); | |
| 72 warning (_g('native package version may not have a revision')) | |
| 73 unless $v->is_native(); | |
| 74 | |
| 75 return 1; | |
| 76 } | |
| 77 | |
| 78 sub do_build { | |
| 79 my ($self, $dir) = @_; | |
| 80 my @tar_ignore = map { "--exclude=$_" } @{$self->{options}{tar_ignore}}; | |
| 81 my @argv = @{$self->{options}{ARGV}}; | |
| 82 | |
| 83 if (scalar(@argv)) { | |
| 84 usageerr(_g("-b takes only one parameter with format `%s'"), | |
| 85 $self->{fields}{'Format'}); | |
| 86 } | |
| 87 | |
| 88 my $sourcepackage = $self->{fields}{'Source'}; | |
| 89 my $basenamerev = $self->get_basename(1); | |
| 90 my $tarname = "$basenamerev.tar." . $self->{options}{comp_ext}; | |
| 91 | |
| 92 info(_g('building %s in %s'), $sourcepackage, $tarname); | |
| 93 | |
| 94 my ($ntfh, $newtar) = tempfile("$tarname.new.XXXXXX", | |
| 95 DIR => getcwd(), UNLINK => 0); | |
| 96 push_exit_handler(sub { unlink($newtar) }); | |
| 97 | |
| 98 my ($dirname, $dirbase) = fileparse($dir); | |
| 99 my $tar = Dpkg::Source::Archive->new(filename => $newtar, | |
| 100 compression => compression_guess_from_filename($tarname), | |
| 101 compression_level => $self->{options}{comp_level}); | |
| 102 $tar->create(options => \@tar_ignore, chdir => $dirbase); | |
| 103 $tar->add_directory($dirname); | |
| 104 $tar->finish(); | |
| 105 rename($newtar, $tarname) | |
| 106 or syserr(_g("unable to rename `%s' (newly created) to `%s'"), | |
| 107 $newtar, $tarname); | |
| 108 pop_exit_handler(); | |
| 109 chmod(0666 &~ umask(), $tarname) | |
| 110 or syserr(_g("unable to change permission of `%s'"), $tarname); | |
| 111 | |
| 112 $self->add_file($tarname); | |
| 113 } | |
| 114 | |
| 115 1; | |
| OLD | NEW |