|
Server : LiteSpeed System : Linux srv107862549.host 5.15.0-124-generic #134-Ubuntu SMP Fri Sep 27 20:20:17 UTC 2024 x86_64 User : malam2778 ( 1069) PHP Version : 8.0.30 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/share/perl5/Debian/Debhelper/ |
Upload File : |
#!/usr/bin/perl
#
# Internal library functions for the dh(1) command
package Debian::Debhelper::Sequence;
use strict;
use warnings;
use Exporter qw(import);
use Debian::Debhelper::Dh_Lib qw(error);
use Debian::Debhelper::SequencerUtil qw(extract_rules_target_name sequence_type SEQUENCE_NO_SUBSEQUENCES
SEQUENCE_ARCH_INDEP_SUBSEQUENCES SEQUENCE_TYPE_ARCH_ONLY SEQUENCE_TYPE_INDEP_ONLY SEQUENCE_TYPE_BOTH
FLAG_OPT_SOURCE_BUILDS_NO_ARCH_PACKAGES FLAG_OPT_SOURCE_BUILDS_NO_INDEP_PACKAGES);
sub _as_command {
my ($input) = @_;
if (ref($input) eq 'HASH') {
return $input;
}
my $rules_target = extract_rules_target_name($input);
if (defined($rules_target)) {
my $sequence_type = sequence_type($rules_target);
return {
'command' => $input,
'command-options' => [],
'sequence-limitation' => $sequence_type,
}
}
return {
'command' => $input,
'command-options' => [],
'sequence-limitation' => SEQUENCE_TYPE_BOTH,
}
}
sub new {
my ($class, $name, $sequence_type, @cmds) = @_;
return bless({
'_name' => $name,
'_subsequences' => $sequence_type,
'_cmds' => [map {_as_command($_)} @cmds],
}, $class);
}
sub name {
my ($this) = @_;
return $this->{'_name'};
}
sub allowed_subsequences {
my ($this) = @_;
return $this->{'_subsequences'};
}
sub _insert {
my ($this, $offset, $existing, $new) = @_;
my @list = @{$this->{'_cmds'}};
my @new;
my $new_cmd = _as_command($new);
foreach my $command (@list) {
if ($command->{'command'} eq $existing) {
push(@new, $new_cmd) if $offset < 0;
push(@new, $command);
push(@new, $new_cmd) if $offset > 0;
} else {
push(@new, $command);
}
}
$this->{'_cmds'} = \@new;
return;
}
sub remove_command {
my ($this, $command) = @_;
$this->{'_cmds'} = [grep { $_->{'command'} ne $command } @{$this->{'_cmds'}}];
return;
}
sub add_command_at_start {
my ($this, $command) = @_;
unshift(@{$this->{'_cmds'}}, _as_command($command));
return;
}
sub add_command_at_end {
my ($this, $command) = @_;
push(@{$this->{'_cmds'}}, _as_command($command));
return;
}
sub rules_target_name {
my ($this, $sequence_type) = @_;
error("Internal error: Invalid sequence type $sequence_type") if $sequence_type eq SEQUENCE_NO_SUBSEQUENCES;
my $name = $this->{'_name'};
my $allowed_sequence_type = $this->{'_subsequences'};
if ($sequence_type ne SEQUENCE_TYPE_BOTH and $allowed_sequence_type eq SEQUENCE_NO_SUBSEQUENCES) {
error("Internal error: Requested subsequence ${sequence_type} of sequence ${name}, but it has no subsequences");
}
if ($sequence_type ne SEQUENCE_TYPE_BOTH) {
return "${name}-${sequence_type}";
}
return $name;
}
sub as_rules_target_command {
my ($this) = shift;
my $rules_name = $this->rules_target_name(@_);
return "debian/rules ${rules_name}";
}
sub flatten_sequence {
my ($this, $sequence_type, $flags) = @_;
error("Invalid sequence type $sequence_type") if $sequence_type eq SEQUENCE_NO_SUBSEQUENCES;
my @cmds;
for my $cmd_desc (@{$this->{'_cmds'}}) {
my $seq_limitation = $cmd_desc->{'sequence-limitation'};
next if ($seq_limitation eq SEQUENCE_TYPE_ARCH_ONLY and ($flags & FLAG_OPT_SOURCE_BUILDS_NO_ARCH_PACKAGES));
next if ($seq_limitation eq SEQUENCE_TYPE_INDEP_ONLY and ($flags & FLAG_OPT_SOURCE_BUILDS_NO_INDEP_PACKAGES));
if ($seq_limitation eq $sequence_type or $sequence_type eq SEQUENCE_TYPE_BOTH or $seq_limitation eq SEQUENCE_TYPE_BOTH) {
my $cmd = $cmd_desc->{'command'};
my @cmd_options = $cmd_desc->{'command-options'};
push(@cmds, [$cmd, @cmd_options]);
next;
}
}
return @cmds;
}
1;