bug#59099: 3-rd party aux files.

Van de Bugger <[email protected]> Sat, 01 Mar 2025 20:06:21 +0300
Newsgroups gmane.comp.sysutils.automake.bugs
Message-ID <[email protected]>
--=-MYh/6pbnU7pq4lV8YVns
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Hi,

> Since the purpose of the new feature is to support per-project helper
> files (right?)=E2=80=A6

No exactly. Per-project helper files can be easily added to the project
source with no problem. The problem if several projects share the same
helper files. Currently such files should be managed manually: if a
helper file changed in one project, it should be manually copied to
other projects that use the same helper file.

My idea is put all helper files I use in my projects to a library.
Every project pulls required files from the library to  the project aux
directory by running=20

$ autoreconf -i

> What comes to mind follows your typo above :)

That wasn't a typo. I was going to introduce AUTOMAKE_LIBDIRS
environment variable.

=E2=81=82

Okay, my initial patch for automake 1.16.5 is attached. Patched
automake looks for files in:

1. Directory specified by --libdir option. If more than one --libdir
option is present in the command line, directories are searched in
left-to-right order.
2. Directory specified by AUTOMAKE_LIBDIR environment variable.
3. Directories specified by AUTOMAKE_LIBDIRS environment variable. The
variable contains a list of directories separated with colon (semicolon
in case of Windows OS).
4. System directories $datadir/$PACKAGE and $datadir/$PACKAGE-
$APIVERSION.

=E2=81=82

Implementation details:

Instead of $libdir variable containing a single library directory,
@libdir array is maintained.

Unused FileUtils::find_file function is modified: (1) The current
directory is not searched implicitly; (2) File optionality is specified
by the last argument, not by question sign in the end of the file name.

find_file is used for file search.

Arguments of --libdir options are pushed to the @libdirs.=C2=A0

When command line parsing finished, content of environment variables
AUTOMAKE_LIBDIR and AUTOMAKE_LIBDIRS is appended, as well as the system
directories (however, system directories are not appended if automake
is not installed). These actions are performed in finalize_libdirs
function, because the function is called twice.

--print-libdir option is renamed to --print-libdirs. The colon-
separated (semicolon in case of Windows OS) list of directories is
printed. Old option, --print-libdir, is still recognized as
abbreviation of the full name.

=E2=81=82

I built the patched automake in Fedora Copr (I have used official
Fedora rpm spec and added my patch). Build result is:

https://copr.fedorainfracloud.org/coprs/vandebugger/testing/build/8714811/
https://download.copr.fedorainfracloud.org/results/vandebugger/testing/fedo=
ra-41-x86_64/08714811-automake/builder-live.log.gz

Testsuite summary:

# TOTAL: 2980
# PASS:  2882
# SKIP:  60
# XFAIL: 38
# FAIL:  0
# XPASS: 0
# ERROR: 0

You see, all the tests passed.=20

=E2=81=82

Incompatibilities with the previous implementation are minor:

1. Subsequent --libdir option does not override the previous --libdir
option.
2. --print-libdir option prints list of directories, not a single
directory.

=E2=81=82

The patched automake solves my problem. Now I can put all the helper
scripts to a directory, set AUTOMAKE_LIBDIRS, and put few lines to
autoconf.ac:

AC_REQUIRE_AUX_FILE([clean-dir.sh])
AC_REQUIRE_AUX_FILE([check-doc-hunspell.sh])
AC_REQUIRE_AUX_FILE([check-html-tidy.sh])
...



---

On Mon, 2022-11-07 at 16:37 -0700, Karl Berry wrote:
> Hi Van - first, I've copied your messages to the bug tracker, so
please =20
> use [[email protected]](mailto:[email protected])=C2=A0and the give=
n
subject line so things stay in =20
> the bug going forward. =20
>
[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D59099](https://debbugs.gnu=
.org/cgi/bugreport.cgi?bug=3D59099)
=20
> (Except my resend of your reply didn't get attached. I don't know why
> not. Will try to figure that out. For the record, your msg is here: =20
>
[https://lists.gnu.org/archive/html/automake/2022-11/msg00001.html](https:/=
/lists.gnu.org/archive/html/automake/2022-11/msg00001.html)
=20
> )
>=20
> =C2=A0=C2=A0=C2=A0 I am not sure which interface to choose for the new fe=
ature. I
see =20
> =C2=A0=C2=A0=C2=A0 few possible approaches:
>=20
> Your summary is admirable :).=C2=A0 I think we should have Jim and/or
other =20
> more experienced Automakers weigh in before you start coding. But
here =20
> are my comments.
>=20
> =C2=A0=C2=A0=C2=A0 Disadvantage is that both directories are =20
> =C2=A0=C2=A0=C2=A0 not writable by non-privileged user.
>=20
> Since the purpose of the new feature is to support per-project helper
> files (right?), a single system directory doesn't seem right. Let's
not =20
> mess around with system directories if we can help it.
>=20
> =C2=A0=C2=A0=C2=A0 2. Let automake maintain the *list* of directories to =
be searched
for =20
> =C2=A0=C2=A0=C2=A0 aux files.
>=20
> Sounds right.
>=20
> =C2=A0=C2=A0=C2=A0 In such case, the --libdir=C2=A0 option (and the AUTOM=
AKE_LIBDIRS =20
> =C2=A0=C2=A0=C2=A0 environment variable) will insert the given directory =
to the
beginning =20
> =C2=A0=C2=A0=C2=A0 (or to the end?) of the list. Multiple --libdir option=
s are
allowed.
>=20
> I like the idea in general.
>=20
> =C2=A0=C2=A0=C2=A0 Is there any existing code relying on the fact that au=
tomake
ignores =20
> =C2=A0=C2=A0=C2=A0 standard directory if the --libdir option is specified=
?
>=20
> The answer to the question "does anything depend on X", for any
Automake =20
> (or Autoconf) behavior X, is yes.=C2=A0 So I think we must not change =
=20
> existing behavior of --libdir or AUTOMAKE_LIBDIR. Instead, we can add
to it.
>=20
> What comes to mind follows your typo above :) ... have a new =20
> option/envvar --libdirs/AUTOMAKE_LIBDIRS which maintains an
independent =20
> list of directories to search. I think the new dirs should be
searched =20
> after the libdir/AUTOMAKE_LIBDIR directory.
>=20
> I think the list of dirs should be searched in the order specified: =20
> --libdirs foo --libdirs bar would search foo then bar.
>=20
> As with --libdir/AUTOMAKE_LIBDIR, if --libdirs is specified, it would
> override (completely) AUTOMAKE_LIBDIRS. No such "extra" directories =20
> would be searched by default.
>=20
> Does that reasonably solve your original request?
>=20
> =C2=A0=C2=A0=C2=A0 Also, it is not clear to me, should it affect searchin=
g for *.am
> =C2=A0=C2=A0=C2=A0 files or not.
>=20
> For consistency, I think the new searching should look for the same =20
> files as the existing searching. Presumably that will be =20
> easiest/cleanest to implement, too.
>=20
> In general, the closer the new behavior is to the existing, the
easier I =20
> think it will be to understand (and implement and document).
>=20
> Wdyt? --thanks, karl.


--=-MYh/6pbnU7pq4lV8YVns
Content-Disposition: attachment; filename="libdirs.patch"
Content-Transfer-Encoding: base64
Content-Type: text/x-patch; name="libdirs.patch"; charset="UTF-8"

ZGlmZiAtdXIgYS9iaW4vYXV0b21ha2UuaW4gYi9iaW4vYXV0b21ha2UuaW4KLS0tIGEvYmluL2F1
dG9tYWtlLmluCTIwMjEtMDktMjAgMDM6NTM6MTQuMDAwMDAwMDAwICswMzAwCisrKyBiL2Jpbi9h
dXRvbWFrZS5pbgkyMDI1LTAzLTAxIDE3OjI4OjUwLjY1NjEwNjU0MCArMDMwMApAQCAtODcsNiAr
ODcsNyBAQAogc3ViIGRlZmluZV92ZXJib3NlX2xpYnRvb2wgKCk7CiBzdWIgZGVmaW5lX3ZlcmJv
c2VfdGV4aW5mbyAoKTsKIHN1YiBkb19jaGVja19tZXJnZV90YXJnZXQgKCk7CitzdWIgZmluYWxp
emVfbGliZGlycyAoKTsKIHN1YiBnZXRfbnVtYmVyX29mX3RocmVhZHMgKCk7CiBzdWIgaGFuZGxl
X2NvbXBpbGUgKCk7CiBzdWIgaGFuZGxlX2RhdGEgKCk7CkBAIC0yODMsNiArMjg0LDggQEAKICMg
VFJVRSBpZiB3ZSBzaG91bGQgYWx3YXlzIHVwZGF0ZSBmaWxlcyB0aGF0IHdlIGtub3cgYWJvdXQu
CiBteSAkZm9yY2VfbWlzc2luZyA9IDA7CiAKKyMgTGlzdCBvZiBkaXJlY3RvcmllcyB0byBsb29r
IGZvciBmaWxlcy4KK215IEBsaWJkaXJzOwogCiAjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICMjCiAjIyBWYXJpYWJsZXMgZmlsbGVkIGR1cmluZyBmaWxlcyBzY2Fu
bmluZy4gICMjCkBAIC0yNTEyLDcgKzI1MTUsNyBAQAogICAgIH0KIAogICAgIG15ICgkY29tcywg
JHZhcnMsICRydWxlcykgPQotICAgICAgZmlsZV9jb250ZW50c19pbnRlcm5hbCAoMSwgIiRsaWJk
aXIvYW0vY29tcGlsZS5hbSIsCisgICAgICBmaWxlX2NvbnRlbnRzX2ludGVybmFsICgxLCBmaW5k
X2ZpbGUgKCJhbS9jb21waWxlLmFtIiwgQGxpYmRpcnMpLAogCQkJICAgICAgbmV3IEF1dG9tYWtl
OjpMb2NhdGlvbiwKIAkJCSAgICAgICdERUZBVUxUX0lOQ0xVREVTJyA9PiAkZGVmYXVsdF9pbmNs
dWRlcywKIAkJCSAgICAgICdNT1NUTFlSTVMnID0+IGpvaW4gKCJcbiIsIEBtb3N0bHlfcm1zKSwK
QEAgLTY3MzksNyArNjc0Miw3IEBACiB7CiAgIG15ICRzYXZlZF9vdXRwdXRfdmFycyA9ICRvdXRw
dXRfdmFyczsKICAgbXkgKCRjb21tZW50cywgdW5kZWYsICRydWxlcykgPQotICAgIGZpbGVfY29u
dGVudHNfaW50ZXJuYWwgKDEsICIkbGliZGlyL2FtL2hlYWRlci12YXJzLmFtIiwKKyAgICBmaWxl
X2NvbnRlbnRzX2ludGVybmFsICgxLCBmaW5kX2ZpbGUgKCJhbS9oZWFkZXItdmFycy5hbSIsIEBs
aWJkaXJzKSwKIAkJCSAgICBuZXcgQXV0b21ha2U6OkxvY2F0aW9uKTsKIAogICBmb3JlYWNoIG15
ICR2YXIgKHNvcnQga2V5cyAlY29uZmlndXJlX3ZhcnMpCkBAIC02OTYzLDcgKzY5NjYsNyBAQAog
IyAoJENPTU1FTlQsICRWQVJJQUJMRVMsICRSVUxFUykKICMgZmlsZV9jb250ZW50c19pbnRlcm5h
bCAoJElTX0FNLCAkRklMRSwgJFdIRVJFLCBbJVRSQU5TRk9STV0pCiAjIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZXR1cm4g
Y29udGVudHMgb2YgYSBmaWxlIGZyb20gJGxpYmRpci9hbSwgYXV0b21hdGljYWxseSBza2lwcGlu
ZworIyBSZXR1cm4gY29udGVudHMgb2YgYSBmaWxlIGZyb20gbGliZGlyL2FtLCBhdXRvbWF0aWNh
bGx5IHNraXBwaW5nCiAjIG1hY3JvcyBvciBydWxlcyB3aGljaCBhcmUgYWxyZWFkeSBrbm93bi4g
JElTX0FNIGlmZiB0aGUgY2FsbGVyIGlzCiAjIHJlYWRpbmcgYW4gQXV0b21ha2UgZmlsZSAoYXMg
b3Bwb3NlZCB0byB0aGUgdXNlcidzIE1ha2VmaWxlLmFtKS4KIHN1YiBmaWxlX2NvbnRlbnRzX2lu
dGVybmFsCkBAIC03MDE3LDcgKzcwMjAsNyBAQAogCXsKIAkgICAgaWYgKCRjb25kICE9IEZBTFNF
KQogCSAgICAgIHsKLQkJbXkgJGZpbGUgPSAoJGlzX2FtID8gIiRsaWJkaXIvYW0vIiA6ICcnKSAu
ICQxOworCQlteSAkZmlsZSA9ICRpc19hbSA/IGZpbmRfZmlsZSAoImFtLyQxIiwgQGxpYmRpcnMp
IDogJDE7CiAJCSR3aGVyZS0+cHVzaF9jb250ZXh0ICgiJyRmaWxlJyBpbmNsdWRlZCBmcm9tIGhl
cmUiKTsKIAkJIyBOLWFyeSAnLj0nIGZhaWxzLgogCQlteSAoJGNvbSwgJHZhcnMsICRydWxlcykK
QEAgLTcxNTYsMTMgKzcxNTksMTMgQEAKICMgJENPTlRFTlRTCiAjIGZpbGVfY29udGVudHMgKCRC
QVNFTkFNRSwgJFdIRVJFLCBbJVRSQU5TRk9STV0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJldHVybiBjb250ZW50cyBvZiBhIGZpbGUgZnJv
bSAkbGliZGlyL2FtLCBhdXRvbWF0aWNhbGx5IHNraXBwaW5nCisjIFJldHVybiBjb250ZW50cyBv
ZiBhIGZpbGUgZnJvbSBsaWJkaXIvYW0sIGF1dG9tYXRpY2FsbHkgc2tpcHBpbmcKICMgbWFjcm9z
IG9yIHJ1bGVzIHdoaWNoIGFyZSBhbHJlYWR5IGtub3duLgogc3ViIGZpbGVfY29udGVudHMKIHsK
ICAgICBteSAoJGJhc2VuYW1lLCAkd2hlcmUsICV0cmFuc2Zvcm0pID0gQF87CiAgICAgbXkgKCRj
b21tZW50cywgJHZhcmlhYmxlcywgJHJ1bGVzKSA9Ci0gICAgICBmaWxlX2NvbnRlbnRzX2ludGVy
bmFsICgxLCAiJGxpYmRpci9hbS8kYmFzZW5hbWUuYW0iLCAkd2hlcmUsCisgICAgICBmaWxlX2Nv
bnRlbnRzX2ludGVybmFsICgxLCBmaW5kX2ZpbGUgKCJhbS8kYmFzZW5hbWUuYW0iLCBAbGliZGly
cyksICR3aGVyZSwKIAkJCSAgICAgICV0cmFuc2Zvcm0pOwogICAgIHJldHVybiAiJGNvbW1lbnRz
JHZhcmlhYmxlcyRydWxlcyI7CiB9CkBAIC03NjU1LDcgKzc2NTgsNyBAQAogICBteSAkbWVzc2Fn
ZSA9ICJyZXF1aXJlZCBmaWxlICckZnVsbGZpbGUnIG5vdCBmb3VuZCI7CiAgIGlmICgkYWRkX21p
c3NpbmcpCiAgICAgewotICAgICAgaWYgKC1mICIkbGliZGlyLyRmaWxlIikKKyAgICAgIGlmICht
eSAkbGliZmlsZSA9IGZpbmRfZmlsZSAoJGZpbGUsIEBsaWJkaXJzLCB7b3B0aW9uYWw9PjF9KSkK
ICAgICAgICAgewogICAgICAgICAgICRzdXBwcmVzcyA9IDE7CiAKQEAgLTc2NzksMTQgKzc2ODIs
MTQgQEAKICAgICAgICAgICB1bmxpbmsgKCRmdWxsZmlsZSkgaWYgLWYgJGZ1bGxmaWxlOwogICAg
ICAgICAgIGlmICgkc3ltbGlua19leGlzdHMgJiYgISAkY29weV9taXNzaW5nKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBpZiAoISBzeW1saW5rICgiJGxpYmRpci8kZmlsZSIsICRmdWxs
ZmlsZSkKKyAgICAgICAgICAgICAgaWYgKCEgc3ltbGluayAoJGxpYmZpbGUsICRmdWxsZmlsZSkK
ICAgICAgICAgICAgICAgICAgIHx8ICEgLWUgJGZ1bGxmaWxlKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICRzdXBwcmVzcyA9IDA7CiAgICAgICAgICAgICAgICAgICAkdHJh
aWxlciA9ICI7IGVycm9yIHdoaWxlIG1ha2luZyBsaW5rOiAkISI7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQotICAgICAgICAgIGVsc2lmIChzeXN0ZW0gKCdjcCcsICIkbGliZGly
LyRmaWxlIiwgJGZ1bGxmaWxlKSkKKyAgICAgICAgICBlbHNpZiAoc3lzdGVtICgnY3AnLCAkbGli
ZmlsZSwgJGZ1bGxmaWxlKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgJHN1cHByZXNz
ID0gMDsKICAgICAgICAgICAgICAgJHRyYWlsZXIgPSAiXG4gICAgZXJyb3Igd2hpbGUgY29weWlu
ZyI7CkBAIC03Njk3LDcgKzc3MDAsNyBAQAogICBlbHNlCiAgICAgewogICAgICAgJHRyYWlsZXIg
PSAiXG4gICdhdXRvbWFrZSAtLWFkZC1taXNzaW5nJyBjYW4gaW5zdGFsbCAnJGZpbGUnIgotICAg
ICAgICBpZiAtZiAiJGxpYmRpci8kZmlsZSI7CisgICAgICAgIGlmIGZpbmRfZmlsZSAoJGZpbGUs
IEBsaWJkaXJzLCB7b3B0aW9uYWw9PjF9KTsKICAgICB9CiAKICAgIyBJZiAtLWZvcmNlLW1pc3Np
bmcgd2FzIHNwZWNpZmllZCwgYW5kIHdlIGhhdmUKQEAgLTgyNTIsOCArODI1NSw5IEBACiAgICAg
KAogICAgICAndmVyc2lvbicgPT4gXCZ2ZXJzaW9uLAogICAgICAnaGVscCcgICAgPT4gXCZ1c2Fn
ZSwKLSAgICAgJ2xpYmRpcj1zJwk9PiBcJGxpYmRpciwKLSAgICAgJ3ByaW50LWxpYmRpcicgICAg
ID0+IHN1YiB7IHByaW50ICIkbGliZGlyXG4iOyBleGl0IDA7IH0sCisgICAgICdsaWJkaXI9cycJ
PT4gXEBsaWJkaXJzLAorICAgICAncHJpbnQtbGliZGlycycgICAgPT4gc3ViIHsgZmluYWxpemVf
bGliZGlycyAoKTsgbG9jYWwgJCIgPSAkcGF0aF9zZXA7CisgICAgICAgcHJpbnQgIkBsaWJkaXJz
XG4iOyBleGl0IDA7IH0sCiAgICAgICdnbnUnCQk9PiBzdWIgeyAkc3RyaWN0ID0gJ2dudSc7IH0s
CiAgICAgICdnbml0cycJCT0+IHN1YiB7ICRzdHJpY3QgPSAnZ25pdHMnOyB9LAogICAgICAnZm9y
ZWlnbicJCT0+IHN1YiB7ICRzdHJpY3QgPSAnZm9yZWlnbic7IH0sCkBAIC04MjcwLDYgKzgyNzQs
OCBAQAogICB1c2UgQXV0b21ha2U6OkdldG9wdCAoKTsKICAgQXV0b21ha2U6OkdldG9wdDo6cGFy
c2Vfb3B0aW9ucyAlY2xpX29wdGlvbnM7CiAKKyAgZmluYWxpemVfbGliZGlycyAoKTsKKwogICBz
ZXRfc3RyaWN0bmVzcyAoJHN0cmljdCk7CiAgIG15ICRjbGlfd2hlcmUgPSBuZXcgQXV0b21ha2U6
OkxvY2F0aW9uOwogICBzZXRfZ2xvYmFsX29wdGlvbiAoJ25vLWRlcGVuZGVuY2llcycsICRjbGlf
d2hlcmUpIGlmICRpZ25vcmVfZGVwczsKQEAgLTgzMDIsNiArODMwOCwxNCBAQAogICAgIGlmICRl
cnJzcGVjICYmICEgQGlucHV0X2ZpbGVzOwogfQogCitzdWIgZmluYWxpemVfbGliZGlycyAoKQor
eworICBwdXNoKEBsaWJkaXJzLCAkRU5We0FVVE9NQUtFX0xJQkRJUn0gLy8gJycpOworICBwdXNo
KEBsaWJkaXJzLCBzcGxpdCgvXFEkcGF0aF9zZXBcRS8sICRFTlZ7QVVUT01BS0VfTElCRElSU30g
Ly8gJycpKTsKKyAgcHVzaChAbGliZGlycywgIiRkYXRhZGlyLyRQQUNLQUdFIiwgIiRkYXRhZGly
LyRQQUNLQUdFLSRBUElWRVJTSU9OIikKKyAgICB1bmxlc3MgJEVOVntBVVRPTUFLRV9VTklOU1RB
TExFRH07CisgIEBsaWJkaXJzID0gZ3JlcCh7JF8gbmUgJyd9IEBsaWJkaXJzKTsKK30KIAogIyBo
YW5kbGVfbWFrZWZpbGUgKCRNQUtFRklMRSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CmRpZmYgLXVyIGEvbGliL0F1dG9tYWtlL0NvbmZpZy5pbiBiL2xpYi9BdXRvbWFrZS9Db25maWcu
aW4KLS0tIGEvbGliL0F1dG9tYWtlL0NvbmZpZy5pbgkyMDIxLTA3LTEyIDA1OjQxOjEzLjAwMDAw
MDAwMCArMDMwMAorKysgYi9saWIvQXV0b21ha2UvQ29uZmlnLmluCTIwMjUtMDMtMDEgMTc6Mjc6
MjkuMTQzMzgzNTQyICswMzAwCkBAIC0yMiwxMCArMjIsMTEgQEAKIHVzZSB3YXJuaW5ncyBGQVRB
TCA9PiAnYWxsJzsKIAogdXNlIEV4cG9ydGVyOwordXNlIENvbmZpZzsKIAogb3VyIEBJU0EgPSBx
dyAoRXhwb3J0ZXIpOwogb3VyIEBFWFBPUlQgPSBxdyAoJEFQSVZFUlNJT04gJFBBQ0tBR0UgJFBB
Q0tBR0VfQlVHUkVQT1JUICRWRVJTSU9OCi0gICAgICAgICAgICAgICAgICAkUkVMRUFTRV9ZRUFS
ICRsaWJkaXIgJHBlcmxfdGhyZWFkcyk7CisgICAgICAgICAgICAgICAgICAkUkVMRUFTRV9ZRUFS
ICRkYXRhZGlyICRwYXRoX3NlcCAkcGVybF90aHJlYWRzKTsKIAogIyBQYXJhbWV0ZXJzIHNldCBi
eSBjb25maWd1cmUuICBOb3QgdG8gYmUgY2hhbmdlZC4gIE5PVEU6IGFzc2lnbgogIyBWRVJTSU9O
IGFzIHN0cmluZyBzbyB0aGF0IGUuZy4gdmVyc2lvbiAwLjMwIHdpbGwgcHJpbnQgY29ycmVjdGx5
LgpAQCAtMzQsMTMgKzM1LDEzIEBACiBvdXIgJFBBQ0tBR0VfQlVHUkVQT1JUID0gJ0BQQUNLQUdF
X0JVR1JFUE9SVEAnOwogb3VyICRWRVJTSU9OID0gJ0BWRVJTSU9OQCc7CiBvdXIgJFJFTEVBU0Vf
WUVBUiA9ICdAUkVMRUFTRV9ZRUFSQCc7Ci1vdXIgJGxpYmRpciA9ICRFTlZ7IkFVVE9NQUtFX0xJ
QkRJUiJ9IHx8ICdAZGF0YWRpckAvQFBBQ0tBR0VALUBBUElWRVJTSU9OQCc7CitvdXIgJGRhdGFk
aXIgPSAnQGRhdGFkaXJAJzsKK291ciAkcGF0aF9zZXAgPSAkQ29uZmlne3BhdGhfc2VwfTsKIAog
b3VyICRwZXJsX3RocmVhZHMgPSAwOwogIyBXZSBuZWVkIGF0IGxlYXN0IHRoaXMgdmVyc2lvbiBm
b3IgQ0xPTkUgc3VwcG9ydC4KIGlmIChldmFsIHsgcmVxdWlyZSA1LjAwN18wMDI7IH0pCiAgIHsK
LSAgICB1c2UgQ29uZmlnOwogICAgICRwZXJsX3RocmVhZHMgPSAkQ29uZmlne3VzZWl0aHJlYWRz
fTsKICAgfQogCmRpZmYgLXVyIGEvbGliL0F1dG9tYWtlL0ZpbGVVdGlscy5wbSBiL2xpYi9BdXRv
bWFrZS9GaWxlVXRpbHMucG0KLS0tIGEvbGliL0F1dG9tYWtlL0ZpbGVVdGlscy5wbQkyMDIxLTA3
LTEyIDA1OjQxOjEzLjAwMDAwMDAwMCArMDMwMAorKysgYi9saWIvQXV0b21ha2UvRmlsZVV0aWxz
LnBtCTIwMjUtMDMtMDEgMDA6MjQ6MjAuNjg5MDIwNjcwICswMzAwCkBAIC01NSw0NiArNTUsNDcg
QEAKIAogPW92ZXIgNAogCi09aXRlbSBDPGZpbmRfZmlsZSAoJGZpbGVfbmFtZSwgQGluY2x1ZGUp
PgorPWl0ZW0gQzxmaW5kX2ZpbGUgKCRmaWxlX25hbWUsIEBpbmNsdWRlLCB7b3B0aW9uYWwgPT4g
JGJvb2x9KT4KIAogUmV0dXJuIHRoZSBmaXJzdCBwYXRoIGZvciBhIEM8JGZpbGVfbmFtZT4gaW4g
dGhlIEM8aW5jbHVkZT5zLgogCi1XZSBtYXRjaCBleGFjdGx5IHRoZSBiZWhhdmlvciBvZiBHTlUg
TTQ6IGZpcnN0IGxvb2sgaW4gdGhlIGN1cnJlbnQKLWRpcmVjdG9yeSAod2hpY2ggaW5jbHVkZXMg
dGhlIGNhc2Ugb2YgYWJzb2x1dGUgZmlsZSBuYW1lcyksIGFuZCB0aGVuLAotaWYgdGhlIGZpbGUg
bmFtZSBpcyBub3QgYWJzb2x1dGUsIGxvb2sgaW4gQzxAaW5jbHVkZT4uCitUaGUgZnVuY3Rpb24g
ZG9lcyBub3QgdHJlYXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHNwZWNpYWxseToKK2lmIHlvdSB3
YW50IHRvIGxvb2sgZm9yIHRoZSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwKK2luY2x1
ZGUgaXQgdG8gdGhlIEBpbmNsdWRlIGxpc3QuCiAKLUlmIHRoZSBmaWxlIGlzIGZsYWdnZWQgYXMg
b3B0aW9uYWwgKGVuZHMgd2l0aCBDPD8+KSwgdGhlbiByZXR1cm4gdW5kZWYKK0lmIHRoZSBmaWxl
IGlzIGZsYWdnZWQgYXMgb3B0aW9uYWwsIHRoZW4gcmV0dXJuIHVuZGVmCiBpZiBhYnNlbnQsIG90
aGVyd2lzZSBleGl0IHdpdGggZXJyb3IuCiAKID1jdXQKIAogIyAkRklMRV9OQU1FCi0jIGZpbmRf
ZmlsZSAoJEZJTEVfTkFNRSwgQElOQ0xVREUpCisjIGZpbmRfZmlsZSAoJEZJTEVfTkFNRSwgQElO
Q0xVREUsIHtvcHRpb25hbCA9PiAkQk9PTH0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiBzdWIgZmluZF9maWxlICgkQCkKIHsKICAgdXNlIEZpbGU6OlNwZWM7CiAKKyAgIyBJ
ZiB0aGUgbGFzdCBhcmd1bWVudCBpcyBoYXNocmVmLCB1c2UgaXQgYXMgb3B0aW9ucy4KKyAgbXkg
JW9wdHMgPSBAXyA+IDEgJiYgcmVmKCRfWy0xXSkgZXEgJ0hBU0gnID8gJXtwb3AoQF8pfSA6ICgp
OwogICBteSAoJGZpbGVfbmFtZSwgQGluY2x1ZGUpID0gQF87Ci0gIG15ICRvcHRpb25hbCA9IDA7
CiAKLSAgJG9wdGlvbmFsID0gMQotICAgIGlmICRmaWxlX25hbWUgPX4gcy9cPyQvLzsKLQotICBy
ZXR1cm4gRmlsZTo6U3BlYy0+Y2Fub25wYXRoICgkZmlsZV9uYW1lKQotICAgIGlmIC1lICRmaWxl
X25hbWU7Ci0KLSAgaWYgKCFGaWxlOjpTcGVjLT5maWxlX25hbWVfaXNfYWJzb2x1dGUgKCRmaWxl
X25hbWUpKQorICBpZiAoRmlsZTo6U3BlYy0+ZmlsZV9uYW1lX2lzX2Fic29sdXRlICgkZmlsZV9u
YW1lKSkKKyAgICB7CisgICAgICByZXR1cm4gRmlsZTo6U3BlYy0+Y2Fub25wYXRoICgkZmlsZV9u
YW1lKQorICAgICAgICBpZiAtZSAkZmlsZV9uYW1lOworICAgIH0KKyAgZWxzZQogICAgIHsKLSAg
ICAgIGZvcmVhY2ggbXkgJHBhdGggKEBpbmNsdWRlKQorICAgICAgZm9yZWFjaCBteSAkZGlyIChA
aW5jbHVkZSkKIAl7Ci0JICByZXR1cm4gRmlsZTo6U3BlYy0+Y2Fub25wYXRoIChGaWxlOjpTcGVj
LT5jYXRmaWxlICgkcGF0aCwgJGZpbGVfbmFtZSkpCi0JICAgIGlmIC1lIEZpbGU6OlNwZWMtPmNh
dGZpbGUgKCRwYXRoLCAkZmlsZV9uYW1lKQorICAgICAgICAgIG15ICRwYXRoID0gRmlsZTo6U3Bl
Yy0+Y2F0ZmlsZSAoJGRpciwgJGZpbGVfbmFtZSk7CisJICByZXR1cm4gRmlsZTo6U3BlYy0+Y2Fu
b25wYXRoICgkcGF0aCkKKwkgICAgaWYgLWUgJHBhdGg7CiAJfQogICAgIH0KIAogICBmYXRhbCAi
JGZpbGVfbmFtZTogbm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKLSAgICB1bmxlc3MgJG9wdGlv
bmFsOworICAgIHVubGVzcyAkb3B0c3tvcHRpb25hbH07CiAgIHJldHVybiB1bmRlZjsKIH0KIAo=


--=-MYh/6pbnU7pq4lV8YVns--