This is an automated email from the git hooks/post-receive script. guillem pushed a commit to branch main in repository dpkg.
View the commit online: https://git.dpkg.org/cgit/dpkg/dpkg.git/commit/?id=c15487a58cfd955ae401c872c95aa375aacd1a88 commit c15487a58cfd955ae401c872c95aa375aacd1a88 Author: Guillem Jover <[email protected]> AuthorDate: Tue Jan 19 04:23:22 2021 +0100 dpkg-architecture: Do not compute values that are not required Further improve the logic to decide what values to detect from the system if not needed. This is a continuation from work done in commit 3f0304b640b7b5df1d727c175b59e75d69f4ba24. --- scripts/dpkg-architecture.pl | 155 +++++++++++++++++++++++++------------------ 1 file changed, 91 insertions(+), 64 deletions(-) diff --git a/scripts/dpkg-architecture.pl b/scripts/dpkg-architecture.pl index 6776117de..fef59a61f 100755 --- a/scripts/dpkg-architecture.pl +++ b/scripts/dpkg-architecture.pl @@ -106,54 +106,72 @@ sub check_arch_coherency } use constant { - DEB_NONE => 0, - DEB_BUILD => 1, - DEB_HOST => 2, - DEB_TARGET => 64, - DEB_ARCH_INFO => 4, - DEB_ARCH_ATTR => 8, - DEB_MULTIARCH => 16, - DEB_GNU_INFO => 32, + DEB_NONE => 0, + + DEB_BUILD_INFO => 0b00001, + DEB_BUILD_ARCH_INFO => 0b00010, + DEB_BUILD_ARCH_ATTR => 0b00100, + DEB_BUILD_MULTIARCH_INFO => 0b01000, + DEB_BUILD_GNU_INFO => 0b10000, + DEB_BUILD_ANY => 0b11111, + + DEB_HOST_INFO => 0b0000100000, + DEB_HOST_ARCH_INFO => 0b0001000000, + DEB_HOST_ARCH_ATTR => 0b0010000000, + DEB_HOST_MULTIARCH_INFO => 0b0100000000, + DEB_HOST_GNU_INFO => 0b1000000000, + DEB_HOST_ANY => 0b1111100000, + + DEB_TARGET_INFO => 0b000010000000000, + DEB_TARGET_ARCH_INFO => 0b000100000000000, + DEB_TARGET_ARCH_ATTR => 0b001000000000000, + DEB_TARGET_MULTIARCH_INFO => 0b010000000000000, + DEB_TARGET_GNU_INFO => 0b100000000000000, + DEB_TARGET_ANY => 0b111110000000000, + + DEB_ALL => 0b111111111111111, }; -use constant DEB_ALL => DEB_BUILD | DEB_HOST | DEB_TARGET | - DEB_ARCH_INFO | DEB_ARCH_ATTR | - DEB_MULTIARCH | DEB_GNU_INFO; +my %arch_deps = ( + DEB_BUILD_ANY+0 => DEB_BUILD_INFO, + DEB_HOST_ANY+0 => DEB_HOST_INFO, + DEB_TARGET_ANY+0 => DEB_TARGET_INFO, +); my %arch_vars = ( - DEB_BUILD_ARCH => DEB_BUILD, - DEB_BUILD_ARCH_ABI => DEB_BUILD | DEB_ARCH_INFO, - DEB_BUILD_ARCH_LIBC => DEB_BUILD | DEB_ARCH_INFO, - DEB_BUILD_ARCH_OS => DEB_BUILD | DEB_ARCH_INFO, - DEB_BUILD_ARCH_CPU => DEB_BUILD | DEB_ARCH_INFO, - DEB_BUILD_ARCH_BITS => DEB_BUILD | DEB_ARCH_ATTR, - DEB_BUILD_ARCH_ENDIAN => DEB_BUILD | DEB_ARCH_ATTR, - DEB_BUILD_MULTIARCH => DEB_BUILD | DEB_MULTIARCH, - DEB_BUILD_GNU_CPU => DEB_BUILD | DEB_GNU_INFO, - DEB_BUILD_GNU_SYSTEM => DEB_BUILD | DEB_GNU_INFO, - DEB_BUILD_GNU_TYPE => DEB_BUILD | DEB_GNU_INFO, - DEB_HOST_ARCH => DEB_HOST, - DEB_HOST_ARCH_ABI => DEB_HOST | DEB_ARCH_INFO, - DEB_HOST_ARCH_LIBC => DEB_HOST | DEB_ARCH_INFO, - DEB_HOST_ARCH_OS => DEB_HOST | DEB_ARCH_INFO, - DEB_HOST_ARCH_CPU => DEB_HOST | DEB_ARCH_INFO, - DEB_HOST_ARCH_BITS => DEB_HOST | DEB_ARCH_ATTR, - DEB_HOST_ARCH_ENDIAN => DEB_HOST | DEB_ARCH_ATTR, - DEB_HOST_MULTIARCH => DEB_HOST | DEB_MULTIARCH, - DEB_HOST_GNU_CPU => DEB_HOST | DEB_GNU_INFO, - DEB_HOST_GNU_SYSTEM => DEB_HOST | DEB_GNU_INFO, - DEB_HOST_GNU_TYPE => DEB_HOST | DEB_GNU_INFO, - DEB_TARGET_ARCH => DEB_TARGET, - DEB_TARGET_ARCH_ABI => DEB_TARGET | DEB_ARCH_INFO, - DEB_TARGET_ARCH_LIBC => DEB_TARGET | DEB_ARCH_INFO, - DEB_TARGET_ARCH_OS => DEB_TARGET | DEB_ARCH_INFO, - DEB_TARGET_ARCH_CPU => DEB_TARGET | DEB_ARCH_INFO, - DEB_TARGET_ARCH_BITS => DEB_TARGET | DEB_ARCH_ATTR, - DEB_TARGET_ARCH_ENDIAN => DEB_TARGET | DEB_ARCH_ATTR, - DEB_TARGET_MULTIARCH => DEB_TARGET | DEB_MULTIARCH, - DEB_TARGET_GNU_CPU => DEB_TARGET | DEB_GNU_INFO, - DEB_TARGET_GNU_SYSTEM => DEB_TARGET | DEB_GNU_INFO, - DEB_TARGET_GNU_TYPE => DEB_TARGET | DEB_GNU_INFO, + DEB_BUILD_ARCH => DEB_BUILD_INFO, + DEB_BUILD_ARCH_ABI => DEB_BUILD_ARCH_INFO, + DEB_BUILD_ARCH_LIBC => DEB_BUILD_ARCH_INFO, + DEB_BUILD_ARCH_OS => DEB_BUILD_ARCH_INFO, + DEB_BUILD_ARCH_CPU => DEB_BUILD_ARCH_INFO, + DEB_BUILD_ARCH_BITS => DEB_BUILD_ARCH_ATTR, + DEB_BUILD_ARCH_ENDIAN => DEB_BUILD_ARCH_ATTR, + DEB_BUILD_MULTIARCH => DEB_BUILD_MULTIARCH_INFO, + DEB_BUILD_GNU_CPU => DEB_BUILD_GNU_INFO, + DEB_BUILD_GNU_SYSTEM => DEB_BUILD_GNU_INFO, + DEB_BUILD_GNU_TYPE => DEB_BUILD_GNU_INFO, + DEB_HOST_ARCH => DEB_HOST_INFO, + DEB_HOST_ARCH_ABI => DEB_HOST_ARCH_INFO, + DEB_HOST_ARCH_LIBC => DEB_HOST_ARCH_INFO, + DEB_HOST_ARCH_OS => DEB_HOST_ARCH_INFO, + DEB_HOST_ARCH_CPU => DEB_HOST_ARCH_INFO, + DEB_HOST_ARCH_BITS => DEB_HOST_ARCH_ATTR, + DEB_HOST_ARCH_ENDIAN => DEB_HOST_ARCH_ATTR, + DEB_HOST_MULTIARCH => DEB_HOST_MULTIARCH_INFO, + DEB_HOST_GNU_CPU => DEB_HOST_GNU_INFO, + DEB_HOST_GNU_SYSTEM => DEB_HOST_GNU_INFO, + DEB_HOST_GNU_TYPE => DEB_HOST_GNU_INFO, + DEB_TARGET_ARCH => DEB_TARGET_INFO, + DEB_TARGET_ARCH_ABI => DEB_TARGET_ARCH_INFO, + DEB_TARGET_ARCH_LIBC => DEB_TARGET_ARCH_INFO, + DEB_TARGET_ARCH_OS => DEB_TARGET_ARCH_INFO, + DEB_TARGET_ARCH_CPU => DEB_TARGET_ARCH_INFO, + DEB_TARGET_ARCH_BITS => DEB_TARGET_ARCH_ATTR, + DEB_TARGET_ARCH_ENDIAN => DEB_TARGET_ARCH_ATTR, + DEB_TARGET_MULTIARCH => DEB_TARGET_MULTIARCH_INFO, + DEB_TARGET_GNU_CPU => DEB_TARGET_GNU_INFO, + DEB_TARGET_GNU_SYSTEM => DEB_TARGET_GNU_INFO, + DEB_TARGET_GNU_TYPE => DEB_TARGET_GNU_INFO, ); my %known_print_format = map { $_ => 1 } qw(shell make); @@ -243,24 +261,37 @@ while (@ARGV) { } } +# Handle variable dependencies +foreach my $k (keys %arch_deps) { + if ($req_vars & $k) { + $req_vars |= $arch_deps{$k}; + } +} + my %v; +foreach my $k (keys %arch_vars) { + next if not length $ENV{$k} or $force; + $v{$k} = $ENV{$k}; + $req_vars &= ~$arch_vars{$k}; +} + # # Set build variables # $v{DEB_BUILD_ARCH} = get_raw_build_arch() - if (action_needs(DEB_BUILD)); + if (action_needs(DEB_BUILD_INFO)); ($v{DEB_BUILD_ARCH_ABI}, $v{DEB_BUILD_ARCH_LIBC}, $v{DEB_BUILD_ARCH_OS}, $v{DEB_BUILD_ARCH_CPU}) = debarch_to_debtuple($v{DEB_BUILD_ARCH}) - if (action_needs(DEB_BUILD | DEB_ARCH_INFO)); + if (action_needs(DEB_BUILD_ARCH_INFO)); ($v{DEB_BUILD_ARCH_BITS}, $v{DEB_BUILD_ARCH_ENDIAN}) = debarch_to_abiattrs($v{DEB_BUILD_ARCH}) - if (action_needs(DEB_BUILD | DEB_ARCH_ATTR)); + if (action_needs(DEB_BUILD_ARCH_ATTR)); $v{DEB_BUILD_MULTIARCH} = debarch_to_multiarch($v{DEB_BUILD_ARCH}) - if (action_needs(DEB_BUILD | DEB_MULTIARCH)); + if (action_needs(DEB_BUILD_MULTIARCH_INFO)); -if (action_needs(DEB_BUILD | DEB_GNU_INFO)) { +if (action_needs(DEB_BUILD_GNU_INFO)) { $v{DEB_BUILD_GNU_TYPE} = debarch_to_gnutriplet($v{DEB_BUILD_ARCH}); ($v{DEB_BUILD_GNU_CPU}, $v{DEB_BUILD_GNU_SYSTEM}) = split(/-/, $v{DEB_BUILD_GNU_TYPE}, 2); } @@ -276,17 +307,17 @@ if (action_needs(DEB_BUILD | DEB_GNU_INFO)) { # Proceed to compute the host variables if needed. $v{DEB_HOST_ARCH} = $req_host_arch || get_raw_host_arch() - if (action_needs(DEB_HOST)); + if (action_needs(DEB_HOST_INFO)); ($v{DEB_HOST_ARCH_ABI}, $v{DEB_HOST_ARCH_LIBC}, $v{DEB_HOST_ARCH_OS}, $v{DEB_HOST_ARCH_CPU}) = debarch_to_debtuple($v{DEB_HOST_ARCH}) - if (action_needs(DEB_HOST | DEB_ARCH_INFO)); + if (action_needs(DEB_HOST_ARCH_INFO)); ($v{DEB_HOST_ARCH_BITS}, $v{DEB_HOST_ARCH_ENDIAN}) = debarch_to_abiattrs($v{DEB_HOST_ARCH}) - if (action_needs(DEB_HOST | DEB_ARCH_ATTR)); + if (action_needs(DEB_HOST_ARCH_ATTR)); $v{DEB_HOST_MULTIARCH} = debarch_to_multiarch($v{DEB_HOST_ARCH}) - if (action_needs(DEB_HOST | DEB_MULTIARCH)); + if (action_needs(DEB_HOST_MULTIARCH_INFO)); -if (action_needs(DEB_HOST | DEB_GNU_INFO)) { +if (action_needs(DEB_HOST_GNU_INFO)) { if ($req_host_gnu_type eq '') { $v{DEB_HOST_GNU_TYPE} = debarch_to_gnutriplet($v{DEB_HOST_ARCH}); } else { @@ -312,18 +343,18 @@ if (action_needs(DEB_HOST | DEB_GNU_INFO)) { # Proceed to compute the target variables if needed. -$v{DEB_TARGET_ARCH} = $req_target_arch || $req_host_arch || get_raw_host_arch() - if (action_needs(DEB_TARGET)); +$v{DEB_TARGET_ARCH} = $req_target_arch || $v{DEB_HOST_ARCH} || $req_host_arch || get_raw_host_arch() + if (action_needs(DEB_TARGET_INFO)); ($v{DEB_TARGET_ARCH_ABI}, $v{DEB_TARGET_ARCH_LIBC}, $v{DEB_TARGET_ARCH_OS}, $v{DEB_TARGET_ARCH_CPU}) = debarch_to_debtuple($v{DEB_TARGET_ARCH}) - if (action_needs(DEB_TARGET | DEB_ARCH_INFO)); + if (action_needs(DEB_TARGET_ARCH_INFO)); ($v{DEB_TARGET_ARCH_BITS}, $v{DEB_TARGET_ARCH_ENDIAN}) = debarch_to_abiattrs($v{DEB_TARGET_ARCH}) - if (action_needs(DEB_TARGET | DEB_ARCH_ATTR)); + if (action_needs(DEB_TARGET_ARCH_ATTR)); $v{DEB_TARGET_MULTIARCH} = debarch_to_multiarch($v{DEB_TARGET_ARCH}) - if (action_needs(DEB_TARGET | DEB_MULTIARCH)); + if (action_needs(DEB_TARGET_MULTIARCH_INFO)); -if (action_needs(DEB_TARGET | DEB_GNU_INFO)) { +if (action_needs(DEB_TARGET_GNU_INFO)) { if ($req_target_gnu_type eq '') { $v{DEB_TARGET_GNU_TYPE} = debarch_to_gnutriplet($v{DEB_TARGET_ARCH}); } else { @@ -333,10 +364,6 @@ if (action_needs(DEB_TARGET | DEB_GNU_INFO)) { } -for my $k (keys %arch_vars) { - $v{$k} = $ENV{$k} if (length $ENV{$k} && !$force); -} - if ($action eq 'list') { foreach my $k (sort keys %arch_vars) { print "$k=$v{$k}\n"; -- Dpkg.Org's dpkg

