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--