Hello,
this email is a notification from the Auto Upgrade Helper
that the automatic attempt to upgrade the recipe *apt* to *1.8.2.2* has
Succeeded.
Next steps:
- apply the patch: git am 0001-apt-upgrade-1.8.2.1-1.8.2.2.patch
- check the changes to upstream patches and summarize them in the commit
message,
- compile an image that contains the package
- perform some basic sanity tests
- amend the patch and sign it off: git commit -s --reset-author --amend
- send it to the appropriate mailing list
Alternatively, if you believe the recipe should not be upgraded at this time,
you can fill RECIPE_NO_UPDATE_REASON in respective recipe file so that
automatic upgrades would no longer be attempted.
Please review the attached files for further information and build/update
failures.
Any problem please file a bug at
https://bugzilla.yoctoproject.org/enter_bug.cgi?product=Automated%20Update%20Handler
Regards,
The Upgrade Helper
From cd27e92dbafe4a3826611e828669d7832665db41 Mon Sep 17 00:00:00 2001
From: Upgrade Helper <[email protected]>
Date: Mon, 15 Feb 2021 18:51:56 +0000
Subject: [PATCH] apt: upgrade 1.8.2.1 -> 1.8.2.2
---
...t-configure-packages-on-installation.patch | 2 +-
...-init-tables-from-dpkg-configuration.patch | 2 +-
...n-dpkg-configure-a-at-the-end-of-our.patch | 2 +-
meta/recipes-devtools/apt/apt/triehash | 728 ------------------
.../apt/{apt_1.8.2.1.bb => apt_1.8.2.2.bb} | 6 +-
5 files changed, 7 insertions(+), 733 deletions(-)
delete mode 100755 meta/recipes-devtools/apt/apt/triehash
rename meta/recipes-devtools/apt/{apt_1.8.2.1.bb => apt_1.8.2.2.bb} (91%)
diff --git a/meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch b/meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch
index 81b328a2ee..5334a13eab 100644
--- a/meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch
+++ b/meta/recipes-devtools/apt/apt/0001-Do-not-configure-packages-on-installation.patch
@@ -1,4 +1,4 @@
-From 96d23fc57d1ff9c851d563d6d6a6c4752dc4f1b6 Mon Sep 17 00:00:00 2001
+From 28e97cef81694ce5d37f416e29421dcbe3330b59 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <[email protected]>
Date: Thu, 21 May 2020 20:28:12 +0000
Subject: [PATCH] Do not configure packages on installation
diff --git a/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch b/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch
index 1417153e81..c0904e3328 100644
--- a/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch
+++ b/meta/recipes-devtools/apt/apt/0001-Do-not-init-tables-from-dpkg-configuration.patch
@@ -1,4 +1,4 @@
-From bf45c314867e5fb12141803fba06f3e45679d628 Mon Sep 17 00:00:00 2001
+From 31c18490e7579e62e3a93dc50f4e679c6f0627c4 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <[email protected]>
Date: Fri, 10 May 2019 16:47:38 +0200
Subject: [PATCH] Do not init tables from dpkg configuration
diff --git a/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch b/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch
index 37f969690c..1b7fe2d332 100644
--- a/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch
+++ b/meta/recipes-devtools/apt/apt/0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch
@@ -1,4 +1,4 @@
-From 34700bebc52659e7e3eecd252f65bd36e669eee8 Mon Sep 17 00:00:00 2001
+From 668fa7fbbf34ddcbe4330f04925b277660632ff6 Mon Sep 17 00:00:00 2001
From: Alexander Kanavin <[email protected]>
Date: Thu, 21 May 2020 20:13:25 +0000
Subject: [PATCH] Revert "always run 'dpkg --configure -a' at the end of our
diff --git a/meta/recipes-devtools/apt/apt/triehash b/meta/recipes-devtools/apt/apt/triehash
deleted file mode 100755
index b08bc6ec30..0000000000
--- a/meta/recipes-devtools/apt/apt/triehash
+++ /dev/null
@@ -1,728 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright (C) 2016 Julian Andres Klode <[email protected]>
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-# THE SOFTWARE.
-
-=encoding utf8
-
-=head1 NAME
-
-triehash - Generate a perfect hash function derived from a trie.
-
-=cut
-
-use strict;
-use warnings;
-use utf8;
-use Getopt::Long;
-
-=head1 SYNOPSIS
-
-B<triehash> [S<I<option>>] [S<I<input file>>]
-
-=head1 DESCRIPTION
-
-triehash takes a list of words in input file and generates a function and
-an enumeration to describe the word
-
-=head1 INPUT FILE FORMAT
-
-The file consists of multiple lines of the form:
-
- [label ~ ] word [= value]
-
-This maps word to value, and generates an enumeration with entries of the form:
-
- label = value
-
-If I<label> is undefined, the word will be used, the minus character will be
-replaced by an underscore. If value is undefined it is counted upwards from
-the last value.
-
-There may also be one line of the format
-
- [ label ~] = value
-
-Which defines the value to be used for non-existing keys. Note that this also
-changes default value for other keys, as for normal entries. So if you place
-
- = 0
-
-at the beginning of the file, unknown strings map to 0, and the other strings
-map to values starting with 1. If label is not specified, the default is
-I<Unknown>.
-
-=head1 OPTIONS
-
-=over 4
-
-=item B<-C>I<.c file> B<--code>=I<.c file>
-
-Generate code in the given file.
-
-=item B<-H>I<header file> B<--header>=I<header file>
-
-Generate a header in the given file, containing a declaration of the hash
-function and an enumeration.
-
-=item B<--enum-name=>I<word>
-
-The name of the enumeration.
-
-=item B<--function-name=>I<word>
-
-The name of the function.
-
-=item B<--label-prefix=>I<word>
-
-The prefix to use for labels.
-
-=item B<--label-uppercase>
-
-Uppercase label names when normalizing them.
-
-=item B<--namespace=>I<name>
-
-Put the function and enum into a namespace (C++)
-
-=item B<--class=>I<name>
-
-Put the function and enum into a class (C++)
-
-=item B<--enum-class>
-
-Generate an enum class instead of an enum (C++)
-
-=item B<--counter-name=>I<name>
-
-Use I<name> for a counter that is set to the latest entry in the enumeration
-+ 1. This can be useful for defining array sizes.
-
-=item B<--ignore-case>
-
-Ignore case for words.
-
-=item B<--multi-byte>=I<value>
-
-Generate code reading multiple bytes at once. The value is a string of power
-of twos to enable. The default value is 320 meaning that 8, 4, and single byte
-reads are enabled. Specify 0 to disable multi-byte completely, or add 2 if you
-also want to allow 2-byte reads. 2-byte reads are disabled by default because
-they negatively affect performance on older Intel architectures.
-
-This generates code for both multiple bytes and single byte reads, but only
-enables the multiple byte reads of GNU C compatible compilers, as the following
-extensions are used:
-
-=over 8
-
-=item Byte-aligned integers
-
-We must be able to generate integers that are aligned to a single byte using:
-
- typedef uint64_t __attribute__((aligned (1))) triehash_uu64;
-
-=item Byte-order
-
-The macros __BYTE_ORDER__ and __ORDER_LITTLE_ENDIAN__ must be defined.
-
-=back
-
-We forcefully disable multi-byte reads on platforms where the variable
-I<__ARM_ARCH> is defined and I<__ARM_FEATURE_UNALIGNED> is not defined,
-as there is a measurable overhead from emulating the unaligned reads on
-ARM.
-
-=item B<--language=>I<language>
-
-Generate a file in the specified language. Currently known are 'C' and 'tree',
-the latter generating a tree.
-
-=item B<--include=>I<header>
-
-Add the header to the include statements of the header file. The value must
-be surrounded by quotes or angle brackets for C code. May be specified multiple
-times.
-
-=back
-
-=cut
-
-my $unknown = -1;
-my $unknown_label = undef;
-my $counter_start = 0;
-my $enum_name = 'PerfectKey';
-my $function_name = 'PerfectHash';
-my $enum_class = 0;
-
-my $code_name = '-';
-my $header_name = '-';
-my $code;
-my $header;
-my $label_prefix = undef;
-my $label_uppercase = 0;
-my $ignore_case = 0;
-my $multi_byte = '320';
-my $language = 'C';
-my $counter_name = undef;
-my @includes = ();
-
-
-Getopt::Long::config('default',
- 'bundling',
- 'no_getopt_compat',
- 'no_auto_abbrev',
- 'permute',
- 'auto_help');
-
-GetOptions ('code|C=s' => \$code_name,
- 'header|H=s' => \$header_name,
- 'function-name=s' => \$function_name,
- 'label-prefix=s' => \$label_prefix,
- 'label-uppercase' => \$label_uppercase,
- 'ignore-case' => \$ignore_case,
- 'enum-name=s' => \$enum_name,
- 'language|l=s' => \$language,
- 'multi-byte=s' => \$multi_byte,
- 'enum-class' => \$enum_class,
- 'include=s' => \@includes,
- 'counter-name=s' => \$counter_name)
- or die('Could not parse options!');
-
-
-# This implements a simple trie. Each node has three attributes:
-#
-# children - A hash of keys to other nodes
-# value - The value to be stored here
-# label - A named representation of the value.
-#
-# The key at each level of the trie can consist of one or more bytes, and the
-# trie can be normalized to a form where all keys at a level have the same
-# length using rebuild_tree().
-package Trie {
-
- sub new {
- my $class = shift;
- my $self = {};
- bless $self, $class;
-
- $self->{children} = {};
- $self->{value} = undef;
- $self->{label} = undef;
-
- return $self;
- }
-
- # Return the largest power of 2 smaller or equal to the argument
- sub alignpower2 {
- my ($self, $length) = @_;
-
- return 8 if ($length >= 8 && $multi_byte =~ /3/);
- return 4 if ($length >= 4 && $multi_byte =~ /2/);
- return 2 if ($length >= 2 && $multi_byte =~ /1/);
-
- return 1;
- }
-
- # Split the key into a head block and a tail
- sub split_key {
- my ($self, $key) = @_;
- my $length = length $key;
- my $split = $self->alignpower2($length);
-
- return (substr($key, 0, $split), substr($key, $split));
- }
-
- # Given a key, a label, and a value, insert that into the tree, possibly
- # replacing an existing node.
- sub insert {
- my ($self, $key, $label, $value) = @_;
-
- if (length($key) == 0) {
- $self->{label} = $label;
- $self->{value} = $value;
- return;
- }
-
- my ($child, $tail) = $self->split_key($key);
-
- $self->{children}{$child} = Trie->new if (!defined($self->{children}{$child}));
-
- $self->{children}{$child}->insert($tail, $label, $value);
- }
-
- # Construct a new trie that only contains words of a given length. This
- # is used to split up the common trie after knowing all words, so we can
- # switch on the expected word length first, and have the per-trie function
- # implement simple longest prefix matching.
- sub filter_depth {
- my ($self, $togo) = @_;
-
- my $new = Trie->new;
-
- if ($togo != 0) {
- my $found = 0;
- foreach my $key (sort keys %{$self->{children}}) {
- if ($togo > length($key) || defined $self->{children}{$key}->{value}) {
- my $child = $self->{children}{$key}->filter_depth($togo - length($key));
-
- $new->{children}{$key}= $child if defined $child;
- $found = 1 if defined $child;
- }
- }
- return if (!$found);
- } else {
- $new->{value} = $self->{value};
- $new->{label} = $self->{label};
- }
-
- return $new;
- }
-
- # (helper for rebuild_tree)
- # Reinsert all value nodes into the specified $trie, prepending $prefix
- # to their $paths.
- sub reinsert_value_nodes_into {
- my ($self, $trie, $prefix) = @_;
-
- $trie->insert($prefix, $self->{label}, $self->{value}) if (defined $self->{value});
-
- foreach my $key (sort keys %{$self->{children}}) {
- $self->{children}{$key}->reinsert_value_nodes_into($trie, $prefix . $key);
- }
- }
-
- # (helper for rebuild_tree)
- # Find the earliest point to split a key. Normally, we split at the maximum
- # power of 2 that is greater or equal than the length of the key. When we
- # are building an ASCII-optimised case-insensitive trie that simply ORs
- # each byte with 0x20, we need to split at the first ambiguous character:
- #
- # For example, the words a-bc and a\rbc are identical in such a situation:
- # '-' | 0x20 == '-' == '\r' | 0x20
- # We cannot simply switch on all 4 bytes at once, but need to split before
- # the ambiguous character so we can process the ambiguous character on its
- # own.
- sub find_earlier_split {
- my ($self, $key) = @_;
-
- if ($ignore_case) {
- for my $i (0..length($key)-1) {
- # If the key starts with an ambiguous character, we need to
- # take only it. Otherwise, we need to take everything
- # before the character.
- return $self->alignpower2($i || 1) if (main::ambiguous(substr($key, $i, 1)));
- }
- }
- return $self->alignpower2(length $key);
- }
-
- # This rebuilds the trie, splitting each key before ambiguous characters
- # as explained in find_earlier_split(), and then chooses the smallest
- # such split at each level, so that all keys at all levels have the same
- # length (so we can use a multi-byte switch).
- sub rebuild_tree {
- my $self = shift;
- # Determine if/where we need to split before an ambiguous character
- my $new_split = 99999999999999999;
- foreach my $key (sort keys %{$self->{children}}) {
- my $special_length = $self->find_earlier_split($key);
- $new_split = $special_length if ($special_length < $new_split);
- }
-
- # Start building a new uniform trie
- my $newself = Trie->new;
- $newself->{label} = $self->{label};
- $newself->{value} = $self->{value};
- $newself->{children} = {};
-
- foreach my $key (sort keys %{$self->{children}}) {
- my $head = substr($key, 0, $new_split);
- my $tail = substr($key, $new_split);
- # Rebuild the child node at $head, pushing $tail downwards
- $newself->{children}{$head} //= Trie->new;
- $self->{children}{$key}->reinsert_value_nodes_into($newself->{children}{$head}, $tail);
- # We took up to one special character of each key label. There might
- # be more, so we need to rebuild recursively.
- $newself->{children}{$head} = $newself->{children}{$head}->rebuild_tree();
- }
-
- return $newself;
- }
-}
-
-# Code generator for C and C++
-package CCodeGen {
- my $static = ($code_name eq $header_name) ? "static " : "";
- my $enum_specifier = $enum_class ? "enum class" : "enum";
-
- sub new {
- my $class = shift;
- my $self = {};
- bless $self, $class;
-
- return $self;
- }
-
- sub open_output {
- my $self = shift;
- if ($code_name ne '-') {
- open($code, '>', $code_name) or die "Cannot open $code_name: $!" ;
- } else {
- $code = *STDOUT;
- }
- if($code_name eq $header_name) {
- $header = $code;
- } elsif ($header_name ne '-') {
- open($header, '>', $header_name) or die "Cannot open $header_name: $!" ;
- } else {
- $header = *STDOUT;
- }
- }
-
- sub mangle_label {
- my ($self, $label) = @_;
-
- $label = $label_prefix . $label if defined($label_prefix);
- $label = uc $label if $label_uppercase;
-
- return $label;
- }
-
- sub word_to_label {
- my ($self, $word) = @_;
-
- $word =~ s/_/__/g;
- $word =~ s/-/_/g;
-
- return $self->mangle_label($word);
- }
-
- # Return a case label, by shifting and or-ing bytes in the word
- sub case_label {
- my ($self, $key) = @_;
-
- return sprintf("'%s'", substr($key, 0, 1)) if not $multi_byte;
-
- my $output = '0';
-
- for my $i (0..length($key)-1) {
- $output .= sprintf("| onechar('%s', %d, %d)", substr($key, $i, 1), 8 * $i, 8*length($key));
- }
-
- return $output;
- }
-
- # Return an appropriate read instruction for $length bytes from $offset
- sub switch_key {
- my ($self, $offset, $length) = @_;
-
- return "string[$offset]" if $length == 1;
- return sprintf("*((triehash_uu%s*) &string[$offset])", $length * 8);
- }
-
- # Render the trie so that it matches the longest prefix.
- sub print_table {
- my ($self, $trie, $fh, $indent, $index) = @_;
- $indent //= 0;
- $index //= 0;
-
- # If we have children, try to match them.
- if (%{$trie->{children}}) {
- # The difference between lowercase and uppercase alphabetical characters
- # is that they have one bit flipped. If we have alphabetical characters
- # in the search space, and the entire search space works fine if we
- # always turn on the flip, just OR the character we are switching over
- # with the bit.
- my $want_use_bit = 0;
- my $can_use_bit = 1;
- my $key_length = 0;
- foreach my $key (sort keys %{$trie->{children}}) {
- $can_use_bit &= not main::ambiguous($key);
- $want_use_bit |= ($key =~ /^[a-zA-Z]+$/);
- $key_length = length($key);
- }
-
- if ($ignore_case && $can_use_bit && $want_use_bit) {
- printf { $fh } ((' ' x $indent) . "switch(%s | 0x%s) {\n", $self->switch_key($index, $key_length), '20' x $key_length);
- } else {
- printf { $fh } ((' ' x $indent) . "switch(%s) {\n", $self->switch_key($index, $key_length));
- }
-
- my $notfirst = 0;
- foreach my $key (sort keys %{$trie->{children}}) {
- if ($notfirst) {
- printf { $fh } (' ' x $indent . " break;\n");
- }
- if ($ignore_case) {
- printf { $fh } (' ' x $indent . "case %s:\n", $self->case_label(lc($key)));
- printf { $fh } (' ' x $indent . "case %s:\n", $self->case_label(uc($key))) if lc($key) ne uc($key) && !($can_use_bit && $want_use_bit);
- } else {
- printf { $fh } (' ' x $indent . "case %s:\n", $self->case_label($key));
- }
-
- $self->print_table($trie->{children}{$key}, $fh, $indent + 1, $index + length($key));
-
- $notfirst=1;
- }
-
- printf { $fh } (' ' x $indent . "}\n");
- }
-
-
- # This node has a value, so it is a possible end point. If no children
- # matched, we have found our longest prefix.
- if (defined $trie->{value}) {
- printf { $fh } (' ' x $indent . "return %s;\n", ($enum_class ? "${enum_name}::" : '').$trie->{label});
- }
-
- }
-
- sub print_words {
- my ($self, $trie, $fh, $indent, $sofar) = @_;
-
- $indent //= 0;
- $sofar //= '';
-
-
- printf { $fh } (' ' x $indent."%s = %s,\n", $trie->{label}, $trie->{value}) if defined $trie->{value};
-
- foreach my $key (sort keys %{$trie->{children}}) {
- $self->print_words($trie->{children}{$key}, $fh, $indent, $sofar . $key);
- }
- }
-
- sub print_functions {
- my ($self, $trie, %lengths) = @_;
- foreach my $local_length (sort { $a <=> $b } (keys %lengths)) {
- print { $code } ("static enum ${enum_name} ${function_name}${local_length}(const char *string)\n");
- print { $code } ("{\n");
- $self->print_table($trie->filter_depth($local_length)->rebuild_tree(), $code, 1);
- printf { $code } (" return %s$unknown_label;\n", ($enum_class ? "${enum_name}::" : ''));
- print { $code } ("}\n");
- }
- }
-
- sub main {
- my ($self, $trie, $num_values, %lengths) = @_;
- print { $header } ("#ifndef TRIE_HASH_${function_name}\n");
- print { $header } ("#define TRIE_HASH_${function_name}\n");
- print { $header } ("#include <stddef.h>\n");
- print { $header } ("#include <stdint.h>\n");
- foreach my $include (@includes) {
- print { $header } ("#include $include\n");
- }
- printf { $header } ("enum { $counter_name = $num_values };\n") if (defined($counter_name));
- print { $header } ("${enum_specifier} ${enum_name} {\n");
- $self->print_words($trie, $header, 1);
- printf { $header } (" $unknown_label = $unknown,\n");
- print { $header } ("};\n");
- print { $header } ("${static}enum ${enum_name} ${function_name}(const char *string, size_t length);\n");
-
- print { $code } ("#include \"$header_name\"\n") if ($header_name ne $code_name);
-
- if ($multi_byte) {
- print { $code } ("#ifdef __GNUC__\n");
- foreach my $i ((16, 32, 64)) {
- print { $code } ("typedef uint${i}_t __attribute__((aligned (1))) triehash_uu${i};\n");
- print { $code } ("typedef char static_assert${i}[__alignof__(triehash_uu${i}) == 1 ? 1 : -1];\n");
- }
-
- print { $code } ("#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__\n");
- print { $code } ("#define onechar(c, s, l) (((uint64_t)(c)) << (s))\n");
- print { $code } ("#else\n");
- print { $code } ("#define onechar(c, s, l) (((uint64_t)(c)) << (l-8-s))\n");
- print { $code } ("#endif\n");
- print { $code } ("#if (!defined(__ARM_ARCH) || defined(__ARM_FEATURE_UNALIGNED)) && !defined(TRIE_HASH_NO_MULTI_BYTE)\n");
- print { $code } ("#define TRIE_HASH_MULTI_BYTE\n");
- print { $code } ("#endif\n");
- print { $code } ("#endif /*GNUC */\n");
-
- print { $code } ("#ifdef TRIE_HASH_MULTI_BYTE\n");
- $self->print_functions($trie, %lengths);
- $multi_byte = 0;
- print { $code } ("#else\n");
- $self->print_functions($trie, %lengths);
- print { $code } ("#endif /* TRIE_HASH_MULTI_BYTE */\n");
- } else {
- $self->print_functions($trie, %lengths);
- }
-
- print { $code } ("${static}enum ${enum_name} ${function_name}(const char *string, size_t length)\n");
- print { $code } ("{\n");
- print { $code } (" switch (length) {\n");
- foreach my $local_length (sort { $a <=> $b } (keys %lengths)) {
- print { $code } (" case $local_length:\n");
- print { $code } (" return ${function_name}${local_length}(string);\n");
- }
- print { $code } (" default:\n");
- printf { $code } (" return %s$unknown_label;\n", ($enum_class ? "${enum_name}::" : ''));
- print { $code } (" }\n");
- print { $code } ("}\n");
-
- # Print end of header here, in case header and code point to the same file
- print { $header } ("#endif /* TRIE_HASH_${function_name} */\n");
- }
-}
-
-# A character is ambiguous if the 1<<5 (0x20) bit does not correspond to the
-# lower case bit. A word is ambiguous if any character is. This definition is
-# used to check if we can perform the |0x20 optimization when building a case-
-# insensitive trie.
-sub ambiguous {
- my $word = shift;
-
- foreach my $char (split //, $word) {
- # If 0x20 does not solely indicate lowercase, it is ambiguous
- return 1 if ord(lc($char)) != (ord($char) | 0x20);
- return 1 if ord(uc($char)) != (ord($char) & ~0x20);
- }
-
- return 0;
-}
-
-sub build_trie {
- my $codegen = shift;
- my $trie = Trie->new;
-
- my $counter = $counter_start;
- my $prev_value;
- my %lengths;
-
- open(my $input, '<', $ARGV[0]) or die "Cannot open $ARGV[0]: $!";
- while (my $line = <$input>) {
- my ($label, $word, $value) = $line =~ m{
- (?:\s*([^~\s]+)\s*~)? # Label ~
- (?:\s*([^~=\s]+))? # Word
- (?:\s*=\s*([^\s]+)\s+)? # = Value
- \s*
- }x;
-
- if (defined $word) {
- $label //= $codegen->word_to_label($word);
- $value //= defined $prev_value ? $prev_value + 1 : 0;
-
- $trie->insert($word, $label, $value);
- $lengths{length($word)} = 1;
- } elsif (defined $value) {
- $unknown = $value;
- $unknown_label = $codegen->mangle_label($label) if defined $label;
- } else {
- die "Invalid line: $line";
- }
-
- $prev_value = $value;
- $counter = $value + 1 if $value >= $counter;
- }
-
- $unknown_label //= $codegen->mangle_label('Unknown');
-
- return ($trie, $counter, %lengths);
-}
-
-# Generates an ASCII art tree
-package TreeCodeGen {
-
- sub new {
- my $class = shift;
- my $self = {};
- bless $self, $class;
-
- return $self;
- }
-
- sub mangle_label {
- my ($self, $label) = @_;
- return $label;
- }
-
- sub word_to_label {
- my ($self, $word) = @_;
- return $word;
- }
-
- sub main {
- my ($self, $trie, $counter, %lengths) = @_;
- printf { $code } ("┌────────────────────────────────────────────────────┐\n");
- printf { $code } ("│ Initial trie │\n");
- printf { $code } ("└────────────────────────────────────────────────────┘\n");
- $self->print($trie);
- printf { $code } ("┌────────────────────────────────────────────────────┐\n");
- printf { $code } ("│ Rebuilt trie │\n");
- printf { $code } ("└────────────────────────────────────────────────────┘\n");
- $self->print($trie->rebuild_tree());
-
- foreach my $local_length (sort { $a <=> $b } (keys %lengths)) {
- printf { $code } ("┌────────────────────────────────────────────────────┐\n");
- printf { $code } ("│ Trie for words of length %-4d │\n", $local_length);
- printf { $code } ("└────────────────────────────────────────────────────┘\n");
- $self->print($trie->filter_depth($local_length)->rebuild_tree());
- }
- }
-
- sub open_output {
- my $self = shift;
- if ($code_name ne '-') {
- open($code, '>:encoding(utf8)', $code_name) or die "Cannot open $ARGV[0]: $!" ;
- } else {
- $code = *STDOUT;
- binmode($code, ':encoding(utf8)');
- }
- }
-
- # Print a trie
- sub print {
- my ($self, $trie, $depth) = @_;
- $depth //= 0;
-
- print { $code } (' → ') if defined($trie->{label});
- print { $code } ($trie->{label} // '', "\n");
- foreach my $key (sort keys %{$trie->{children}}) {
- print { $code } ('│ ' x ($depth), "├── $key");
- $self->print($trie->{children}{$key}, $depth + 1);
- }
- }
-}
-
-my %codegens = (
- C => 'CCodeGen',
- tree => 'TreeCodeGen',
-);
-
-
-defined($codegens{$language}) or die "Unknown language $language. Valid choices: ", join(', ', keys %codegens);
-my $codegen = $codegens{$language}->new();
-my ($trie, $counter, %lengths) = build_trie($codegen);
-
-$codegen->open_output();
-$codegen->main($trie, $counter, %lengths);
-
-
-=head1 LICENSE
-
-triehash is available under the MIT/Expat license, see the source code
-for more information.
-
-=head1 AUTHOR
-
-Julian Andres Klode <[email protected]>
-
-=cut
-
diff --git a/meta/recipes-devtools/apt/apt_1.8.2.1.bb b/meta/recipes-devtools/apt/apt_1.8.2.2.bb
similarity index 91%
rename from meta/recipes-devtools/apt/apt_1.8.2.1.bb
rename to meta/recipes-devtools/apt/apt_1.8.2.2.bb
index 0e10f9ba1d..3cefaf706d 100644
--- a/meta/recipes-devtools/apt/apt_1.8.2.1.bb
+++ b/meta/recipes-devtools/apt/apt_1.8.2.2.bb
@@ -4,11 +4,13 @@ SECTION = "base"
# Triehash script taken from https://github.com/julian-klode/triehash
SRC_URI = "${DEBIAN_MIRROR}/main/a/apt/${BPN}_${PV}.tar.xz \
- file://triehash \
file://0001-Disable-documentation-directory-altogether.patch \
file://0001-Fix-musl-build.patch \
file://0001-CMakeLists.txt-avoid-changing-install-paths-based-on.patch \
file://0001-test-libapt-do-not-use-gtest-from-the-host.patch \
+ file://0001-Do-not-init-tables-from-dpkg-configuration.patch \
+ file://0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch \
+ file://0001-Do-not-configure-packages-on-installation.patch \
"
SRC_URI_append_class-native = " \
@@ -23,7 +25,7 @@ SRC_URI_append_class-nativesdk = " \
file://0001-Do-not-configure-packages-on-installation.patch \
"
-SRC_URI[sha256sum] = "6d447f2e9437ec24e78350b63bb0592bee1f050811d51990b0c783183b0983f8"
+SRC_URI[sha256sum] = "f5030de22a5cc80db6fe0d42373b5df25d7dc56e94d9155f2eaa80dbd65e82fa"
LIC_FILES_CHKSUM = "file://COPYING.GPL;md5=b234ee4d69f5fce4486a80fdaf4a4263"
# the package is taken from snapshots.debian.org; that source is static and goes stale
--
2.17.1
packages/core2-32-poky-linux/apt/apt-bash-completion: PV changed from "1.8.2.1"
to "1.8.2.2"
packages/core2-32-poky-linux/apt/apt-bash-completion: PKGV changed from 1.8.2.1
[default] to 1.8.2.2 [default]
packages/core2-32-poky-linux/apt/apt-dbg: PV changed from "1.8.2.1" to "1.8.2.2"
packages/core2-32-poky-linux/apt/apt-dbg: PKGSIZE changed from 61251020 to
61057652 (-0%)
packages/core2-32-poky-linux/apt/apt-dbg: PKGV changed from 1.8.2.1 [default]
to 1.8.2.2 [default]
packages/core2-32-poky-linux/apt/apt-dev: PV changed from "1.8.2.1" to "1.8.2.2"
packages/core2-32-poky-linux/apt/apt-dev: PKGV changed from 1.8.2.1 [default]
to 1.8.2.2 [default]
packages/core2-32-poky-linux/apt/apt-doc: PV changed from "1.8.2.1" to "1.8.2.2"
packages/core2-32-poky-linux/apt/apt-doc: PKGV changed from 1.8.2.1 [default]
to 1.8.2.2 [default]
packages/core2-32-poky-linux/apt/apt-locale: PV changed from "1.8.2.1" to
"1.8.2.2"
packages/core2-32-poky-linux/apt/apt-locale: PKGV changed from 1.8.2.1
[default] to 1.8.2.2 [default]
packages/core2-32-poky-linux/apt/apt-src: PV changed from "1.8.2.1" to "1.8.2.2"
packages/core2-32-poky-linux/apt/apt-src: PKGSIZE changed from 2945380 to
2947203 (+0%)
packages/core2-32-poky-linux/apt/apt-src: PKGV changed from 1.8.2.1 [default]
to 1.8.2.2 [default]
packages/core2-32-poky-linux/apt/apt-staticdev: PV changed from "1.8.2.1" to
"1.8.2.2"
packages/core2-32-poky-linux/apt/apt-staticdev: PKGV changed from 1.8.2.1
[default] to 1.8.2.2 [default]
packages/core2-32-poky-linux/apt/apt: PV changed from "1.8.2.1" to "1.8.2.2"
packages/core2-32-poky-linux/apt/apt: PKGSIZE changed from 3940183 to 3931991
(-0%)
packages/core2-32-poky-linux/apt/apt: PKGV changed from 1.8.2.1 [default] to
1.8.2.2 [default]
packages/core2-32-poky-linux/apt: PV changed from "1.8.2.1" to "1.8.2.2"
packages/core2-32-poky-linux/apt: PKGV changed from 1.8.2.1 [default] to
1.8.2.2 [default]
packages/core2-32-poky-linux/apt: SRC_URI changed from
"http://ftp.debian.org/debian/pool/main/a/apt/apt_1.8.2.1.tar.xz
file://triehash file://0001-Disable-documentation-directory-altogether.patch
file://0001-Fix-musl-build.patch
file://0001-CMakeLists.txt-avoid-changing-install-paths-based-on.patch
file://0001-test-libapt-do-not-use-gtest-from-the-host.patch" to
"http://ftp.debian.org/debian/pool/main/a/apt/apt_1.8.2.2.tar.xz
file://0001-Disable-documentation-directory-altogether.patch
file://0001-Fix-musl-build.patch
file://0001-CMakeLists.txt-avoid-changing-install-paths-based-on.patch
file://0001-test-libapt-do-not-use-gtest-from-the-host.patch
file://0001-Do-not-init-tables-from-dpkg-configuration.patch
file://0001-Revert-always-run-dpkg-configure-a-at-the-end-of-our.patch
file://0001-Do-not-configure-packages-on-installation.patch"
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#148091):
https://lists.openembedded.org/g/openembedded-core/message/148091
Mute This Topic: https://lists.openembedded.org/mt/80673938/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-